2011-01-12 10 views
23

curry tutorial की धारा 3.13.3 से:तार्किक भाषाओं में लक्ष्य निलंबन को किस प्रकार से सिस्टम रोक सकता है?


संचालन residuate कि, कठोर कहा जाता है, जबकि कार्य है कि संकीर्ण लचीला कहा जाता है। सभी परिभाषित परिचालन लचीले होते हैं जबकि अंकगणितीय परिचालनों जैसे अधिकांश आदिम परिचालन कठोर होते हैं क्योंकि अनुमान लगाना उनके लिए उचित विकल्प नहीं है।

infixr 5 ++ 
... 
(++)    :: [a] -> [a] -> [a] 
[]  ++ ys = ys 
(x:xs) ++ ys  = x : xs ++ ys 

ऑपरेशन "++" लचीला है, हम एक विशेष संपत्ति को संतोषजनक एक सूची के लिए खोज करने के लिए उपयोग कर सकते हैं के बाद से:

Prelude> x ++ [3,4] =:= [1,2,3,4]  where x free 
Free variables in goal: x 
Result: success 
Bindings: 
x=[1,2] ? 
उदाहरण के लिए, प्रस्तावना के रूप में निम्नानुसार एक सूची संयोजन आपरेशन को परिभाषित करता है

दूसरी तरफ, पूर्वनिर्धारित अंकगणितीय परिचालन जैसे "+" जोड़ना कठोर है। इस प्रकार, एक कॉल "+" एक तर्क चर के साथ एक बहस flounders के रूप में करने के लिए:

Prelude> x + 2 =:= 4 where x free 
Free variables in goal: x 
*** Goal suspended! 

करी लक्ष्यों लेखन कि निलंबित कर दिया जाएगा से बचने के लिए प्रकट नहीं होता। किस प्रकार के सिस्टम समय से पहले पता लगा सकते हैं कि कोई लक्ष्य निलंबित किया जा रहा है या नहीं?

+5

आईएमओ, इस तरह के एक प्रश्न का उत्तर टाइप सिस्टम (शायद, http://cstheory.stackexchange.com पर) या करी विशेषज्ञों (उनकी मेलिंग सूची में) द्वारा विशेषज्ञों द्वारा जल्द ही दिया जा सकता है। –

उत्तर

3

आपने जो वर्णन किया है वह मोड जांच की तरह लगता है, जो आमतौर पर जांच करता है कि इनपुट के एक निश्चित सेट के लिए कौन से आउटपुट उपलब्ध होंगे। आप भाषा बुध की जांच कर सकते हैं जो मोड की जांच को गंभीरता से लेता है।

संबंधित मुद्दे