संपादित करें में त्वरित प्रकार परिवर्तक संपादित करें: हल किया गया। मुझे पता नहीं था कि स्रोत फ़ाइल में भाषा विस्तार को सक्षम करने से जीएचसीआई में भाषा विस्तार सक्षम नहीं हुआ है। समाधान जीएचसीआई में :set FlexibleContexts
था।हास्केल
मुझे हाल ही में पता चला है कि हास्केल में कक्षाओं और उदाहरणों में प्रकार की घोषणा हॉर्न क्लॉज हैं। इसलिए मैंने अंकगणितीय परिचालन को से आर्ट ऑफ़ प्रोलॉग, अध्याय 3, हास्केल में एन्कोड किया। उदाहरण के लिए:
fac(0,s(0)).
fac(s(N),F) :- fac(N,X), mult(s(N),X,F).
class Fac x y | x -> y
instance Fac Z (S Z)
instance (Fac n x, Mult (S n) x f) => Fac (S n) f
pow(s(X),0,0) :- nat(X).
pow(0,s(X),s(0)) :- nat(X).
pow(s(N),X,Y) :- pow(N,X,Z), mult(Z,X,Y).
class Pow x y z | x y -> z
instance (N n) => Pow (S n) Z Z
instance (N n) => Pow Z (S n) (S Z)
instance (Pow n x z, Mult z x y) => Pow (S n) x y
प्रोलॉग में, मूल्यों को (तर्क) चर के लिए तत्काल में तत्काल किया जाता है। हालांकि, मुझे समझ में नहीं आता कि हास्केल में टाइप वैरिएबल को कैसे चालू किया जाए। यही है, मुझे समझ में नहीं आता है कि हास्केल प्रोलॉग क्वेरी
?-f(X1,X2,...,Xn)
है। मुझे लगता है कि
:t undefined :: (f x1 x2 ... xn) => xi
हास्केल xi
का दृष्टांत कर सकता है, लेकिन यह एक Non type-variable argument in the constraint
त्रुटि देता है, यहां तक कि FlexibleContexts
सक्षम के साथ।
ध्यान रखें कि यह हैकेल के प्रकार सिस्टम में प्रोलॉग एम्बेड नहीं करता है। टाइपक्लास सॉल्वर * बैकट्रैकिंग * नहीं करता है। – luqui
आप सही हैं; हालांकि, मैं किसी भी प्रभाव के तहत नहीं था कि यह किया था। एक वास्तविक एम्बेडिंग के लिए और अधिक काम की आवश्यकता होगी :)। – danportin