मुझे सभी X
, some_predicate(X)
और वास्तव में X
पर गिनने की आवश्यकता है। ऐसा करने का सबसे अच्छा तरीका क्या है?swi-prolog में कुल/3
पहला सुराग इसे सभी को ढूंढना है, एक सूची में जमा होना और इसकी लंबाई वापस करना है।
countAllStuff(X) :-
findall(Y
, permutation([1,2,3,4,5,6,7,8,9,10], Y)
, List
),
length(List, X).
(permutation/2
केवल दिखा कई भिन्न रूप देखते हैं कि उदाहरण है और यह बुरा जिस तरह से यह सब इकट्ठा करने के लिए है)
जाहिर है, मैं है स्टैक-अतिप्रवाह।
?- countAllStuff(X).
ERROR: Out of global stack
से, मैं findall
setof
और कुछ भी नहीं परिवर्तन करने के लिए बदलने के लिए कोशिश कर रहा हूँ।
आखिरकार, मैंने aggregate
(क्लिक करने योग्य) की भविष्यवाणी की है और इसका उपयोग करने की कोशिश की है।
?- aggregate(count, permutation([1,2,3,4], X), Y).
X = [1, 2, 3, 4],
Y = 1 .
?- aggregate(count, [1,2,3,4], permutation([1,2,3,4], X), Y).
X = [1, 2, 3, 4],
Y = 1 ;
X = [1, 2, 4, 3],
Y = 1 ;
यह सब गलत है, मुझे लगता है। मुझे कुछ
?- aggregate(count, permutation([1,2,3,4], X), Y).
Y = 24 .
1) मैं कुछ गलत क्या कर रहा हूं?
2) मैं सही उत्तर पाने के लिए भविष्यवाणी कैसे कर सकता हूं?
मिल एक्स^उस मामले में क्रमचय क्या है? –
@ garm0nboz1a: 'X ^' का अर्थ है "वहां मौजूद है 'एक्स," इसलिए संपूर्ण सूत्र का अर्थ है "क्रमपरिवर्तन ([1,2,3,4], एक्स) के तरीकों की संख्या गिनती है *' सफल कुछ * 'एक्स' और उस नंबर को कॉल करें 'एन'।" –