एक विधेय त्रिभुज (बीएस, डीएस) लिखें जहां बीएस फू की स्थिति की एक सूची है और डीएस स्थिति में अंतर की (एकल) सूची है। अंतर्निहित विधेय परिशिष्ट का उपयोग करें और अपनी दूरी का अनुमान लगाएं।

यह इस प्रश्न से संबंधित है: प्रोलॉग में abs() के साथ एक सूची बनाएं

distances([], _, []).
distances([H|T], B, [D|Ds]) :- abs(H - B, D), distances(T, B, Ds).

triangle([],[]).
triangle([H|T], [D|Dt]) :-  distances(T,H,D), triangle(T,Dt).


?- triangle([1,2,3],A).
A = [[1, 2], [1], []].

मुझे जिस समाधान की आवश्यकता है

?- triangle([1,2,3],A).
A = [1,2,1].

उत्तर सही है लेकिन यह सूचियों की सूची में है।

मुझे Ds को एकल सूची में बदलने में समस्या हो रही है। मैंने विधेय के भीतर विभिन्न पदों पर एपेंड का उपयोग करने की कोशिश की है, लेकिन या तो दोहराव प्राप्त करें या विधेय का मूल्यांकन गलत है। मैं एपेंड के साथ डीएस को एक सूची [1,2,3] में कैसे बदल सकता हूं?

1
BlueBerry 4 अप्रैल 2020, 22:02

1 उत्तर

सबसे बढ़िया उत्तर

आप सूची D को Dt के साथ जोड़ सकते हैं, बजाय [D|Dt] का उपयोग करने के, जहां आप इस प्रकार एक तत्व D के साथ सूची तैयार करते हैं:

triangle([],[]).
triangle([H|T], Ds) :-
    distances(T, H, D),
    append(D, Dt, Ds),
    triangle(T, Dt).
1
Willem Van Onsem 4 अप्रैल 2020, 19:13