मैं यहां और वहां जो पाया है उसके आधार पर अतिरिक्त विवरण, क्योंकि मैं एक निहितार्थ ऑपरेटर की तलाश में था: आप अपने स्वयं के ऑपरेटरों को परिभाषित करने के लिए एक चालाक हैक का उपयोग कर सकते हैं। इस परिणाम के लिए मुझे अग्रणी स्रोतों के साथ एनोटेटेड एक चल रहा उदाहरण है।
#!/usr/bin/python
# From http://code.activestate.com/recipes/384122/ (via http://stackoverflow.com/questions/932328/python-defining-my-own-operators)
class Infix:
def __init__(self, function):
self.function = function
def __ror__(self, other):
return Infix(lambda x, self=self, other=other: self.function(other, x))
def __rlshift__(self, other):
return Infix(lambda x, self=self, other=other: self.function(other, x))
def __or__(self, other):
return self.function(other)
def __rshift__(self, other):
return self.function(other)
def __call__(self, value1, value2):
return self.function(value1, value2)
from itertools import product
booleans = [False,True]
# http://stackoverflow.com/questions/16405892/is-there-an-implication-logical-operator-in-python
# http://jacob.jkrall.net/lost-operator/
operators=[
(Infix(lambda p,q: False), "F"),
(Infix(lambda p,q: True), "T"),
(Infix(lambda p,q: p and q), "&"),
(Infix(lambda p,q: p or q) , "V"),
(Infix(lambda p,q: p != q) , "^"),
(Infix(lambda p,q: ((not p) or not q)), "nad"),
(Infix(lambda p,q: ((not p) and not q)), "nor"),
(Infix(lambda p,q: ((not p) or q)), "=>"),
]
for op,sym in operators:
print "\nTruth tables for %s" % sym
print "\np\tq\tp %s q\tq %s p" % (sym,sym)
for p,q in product(booleans,repeat=2):
print "%d\t%d\t%d\t%d" % (p,q,p |op| q,q |op| p)
print "\np\tq\tr\tp %s q\tq %s r\t(p %s q) %s r\tp %s (q %s r)\tp %s q %s r" % (sym,sym,sym,sym,sym,sym,sym,sym)
for p,q,r in product(booleans,repeat=3):
print "%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d" % (p,q,r,p |op| q,q |op| r, (p |op| q) |op| r, p |op| (q |op| r), p |op| q |op| r)
assert((p |op| q) |op| r == p |op| q |op| r)
और उस से (x और y) सरल है या एक्स नहीं। धन्यवाद –
टीटीएल सहमत है - लेकिन कोड में देखना जरूरी नहीं है, हालांकि मूल से सरल है। एक फ़ंक्शन - यानी 'का अर्थ है (x, y) '- विचार को स्थानांतरित करने में अक्सर मदद कर सकता है, अगर ऐसा निर्माण अक्सर नाम के वारंट के लिए पर्याप्त होता है। – user2246674
@ user2246674 सहमत हैं, मैं इसे स्पष्टता के लिए एक समारोह बनाने की सलाह दूंगा। –