आपका प्रश्न बहुत वैध है, +1।
इस प्रतीत होता है कि मनमाने ढंग से पसंद का कारण यह है कि (is)/2
तुलनात्मक रूप से निम्न स्तर की भविष्यवाणी है और केवल बहुत ही विशिष्ट मामलों में काम करता है जिसे केवल प्रक्रियात्मक रूप से समझा जा सकता है, न कि घोषणात्मक रूप से। इसलिए, (is)/2
शुरुआती लोगों के लिए समझना बेहद मुश्किल है और बेहतर से बचा जाना चाहिए क्योंकि यह प्रोलॉग का उपयोग करते समय कई रिलेशनल गुणों का आनंद लेना चाहता है।
घोषणात्मक समाधान बाधाओं का उपयोग करना है, जहां आप वही कर सकते हैं जो आप कहते हैं। पूर्णांक पर संबंधों के लिए, कृपया को (#=)/2
द्वारा प्रतिस्थापित करने वाले रिलेशनल गुणों का आनंद लेने के लिए प्रतिस्थापित करें।
उदाहरण के लिए, जीएनयू Prolog का उपयोग कर: SICStus Prolog और SWI की तरह अन्य प्रणालियों में
count([], 0).
count([_|Ls], N) :-
count(Ls, X),
X #= N - 1,
N #> 0.
, आप वर्तमान में अभी भी इस के लिए library(clpfd)
उपयोग करने के लिए की जरूरत है। इसके अलावा, मैं अत्यधिक इस संबंध के लिए एक अधिक कथात्मक नाम सलाह देते हैं, भी स्पष्ट कर दिया है, जिसमें तर्क को दर्शाता है क्या:
:- use_module(library(clpfd)).
list_length([], 0).
list_length([_|Ls], N) :-
list_length(Ls, X),
X #= N - 1,
N #> 0.
नमूना प्रश्न:
?- list_length([_,_,_], N).
N = 3.
?- list_length(Ls, 2).
Ls = [_G602, _G605] .
मैं एक आसान के रूप में इस विधेय की समाप्ति गुणों में सुधार छोड़ व्यायाम।
मामूली नाइट: प्रभाव का मतलब असाइनमेंट है। – false