में बेनामी कार्यों से सच्चे टेबल्स मैं एक दिए गए बूलियन अभिव्यक्ति के लिए एक सत्य तालिका उत्पन्न करने की कोशिश कर रहा हूं। मैं इसे एक नया डेटाटाइप BoolExpr बनाने के साथ कर सकता हूं, लेकिन मैं इसे एक अज्ञात फ़ंक्शन के साथ करना चाहता हूं। यह इस तरह से काम करने के लिए चाहिए था:हास्केल
> tTable (\x y -> not (x || y))
output:
F F | T
F T | F
T F | F
T T | F
मेरे दृष्टिकोण:
tbl p = [(uncurry p) tuple | tuple <- allval]
where allval=[(x,y) | x <- [False,True], y <- [False,True]]
यह काम करता है, लेकिन केवल 2 तर्क के लिए। मैं इसे किसी भी तर्क के लिए करना चाहता हूं। तो मैं सोचा मैं एक समारोह है कि एक सूची से तर्क लेता होगा:
argsFromList f [] = f
argsFromList f (x:xs) = argsFromList (f x) xs
यह काम नहीं करता:
Occurs check: cannot construct the infinite type: t = t1 -> t
Expected type: t -> [t1] -> t1 -> t
Inferred type: (t1 -> t) -> [t1] -> t1 -> t
In the expression: argsFromList (f x) xs
मुझे समझ नहीं आता कि समस्या क्या यहाँ है। यदि कोई मुझे सही दिशा में इंगित कर सकता है या एक लिंक पोस्ट कर सकता है तो मैं बहुत आभारी हूं।
संभावित डुप्लिकेट [हैकेल में ऐसी फ़ंक्शन परिभाषा क्यों नहीं है?] (Http://stackoverflow.com/questions/6168880/why-is-such-a-function-definition-not-allowed-in- हैकसेल) –
ध्यान दें कि आप लैम्ब्डा को '(\ [x, y] -> नहीं (x || y))' के रूप में परिभाषित कर सकते हैं, 'जो स्वचालित रूप से आपको "एक ही प्रकार के मनमाने ढंग से कई तर्कों के साथ कार्य करता है "। – leftaroundabout