2011-09-30 16 views
9

मेरे पास एक मानक डेटाटाइप है जो भविष्यवाणी तर्क के सूत्रों का प्रतिनिधित्व करता है। एक समारोह अलगाव के लिए एक प्राकृतिक कटौती उन्मूलन नियम का प्रतिनिधित्व करने लग सकती है:फ़ंक्शन "कुछ भी नहीं" के बजाय "कोई समाधान नहीं"

d_el p q = 
    if p =: (Dis r s) && q =: (Neg r) then Just s else 
    if q =: (Dis r s) && p =: (Neg r) then Just s else 
    Nothing where r,s free 

x =: y = (x =:= y) == success 

कुछ भी नहीं करने के लिए मूल्यांकन कर जब एकीकरण में विफल रहता है के बजाय, समारोह PACKS में कोई समाधान प्रस्तुत करती है:

logic> d_el (Dis Bot Top) (Not Bot) 
Result: Just Top 
More Solutions? [Y(es)/n(o)/a(ll)] n 
logic> d_el (Dis Bot Top) (Not Top) 
No more solutions. 

मैं क्या याद आ रही है, और elNothing का मूल्यांकन क्यों नहीं करता है जब एकीकरण विफल हो जाता है?

+1

भाषा मैं उपयोग कर रहा हूँ करी, एक कार्यात्मक-तर्क प्रोग्रामिंग langauge (टैग देखें)। – danportin

+0

ओह - मुझे खेद है .... अज्ञानता बहुत शर्मनाक हो सकती है .... – Carsten

+2

जैसा कि आप शायद जानते हैं, "करी" एक शब्द भी है जिसका अर्थ अन्य भाषाओं में है (जैसे हास्केल, जाहिर है) तो शायद आपको [ 'करी' टैग के लिए स्टैक ओवरफ़्लो विकी पृष्ठ पर कुछ सामग्री जोड़ें [http://stackoverflow.com/edit-tag-wiki/45806)। – MatrixFrog

उत्तर

1

ऐसा लगता है कि यह समीकरण बाधाओं का उपयोग करने का सबसे अच्छा तरीका नहीं है। जब a =:= b विफल रहता है तो पूर्ण फ़ंक्शन खंड विफल रहता है।
उदा .:

xx x = if (x =:= 5) == success then 1 else x 
xx x = 3 

xx 7 परिणामों में 3 (7 नहीं), क्योंकि 7 =:= 5 पूरी तरह से xx समारोह के पहले खंड समाप्त हो जाता है का मूल्यांकन।

मुझे लगता है कि कोड इस तरह दिखना चाहिए:

d_el p q = case (p,q) of 
    (Dis a s, Neg b) -> if a == b then Just s else Nothing 
    (Neg a, Dis b s) -> if a == b then Just s else Nothing 
    _ -> Nothing 
संबंधित मुद्दे