मेरे एक बेहतर समझ के लिए पूर्ण नाम के साथ समाधान:
% emptyMatrix(Line, EmptyMatrix)
emptyMatrix([],[]).
emptyMatrix([_|T1],[[]|T2]):-emptyMatrix(T1,T2).
% only length of parameter 'Line' is interesting. It ignores its content.
% appendElement(Element, InputList, OutputList)
appendElement(E,[],[E]).
appendElement(E,[H|T],[H|L]):-appendElement(E,T,L).
% appendTransposed(NestedList, InputMatrix, OutputMatrix)
appendTransposed([],[],[]).
appendTransposed([X|T1],[],[[X]|T3]):-appendTransposed(T1,[],T3).
appendTransposed([X|T1],[R|T2],[C|T3]):-appendElement(X,R,C),appendTransposed(T1,T2,T3).
% transposeMatrix(InputMatrix, TransposedMatrix)
transposeMatrix([L|M],T):-emptyMatrix(L,A),transpose([L|M],T,A).
transpose([],T,T).
transpose([L|M],T,A):-appendTransposed(L,A,B),transpose(M,T,B).
ए 'लाइन' एक स्तंभ या एक पंक्ति हो सकता है।
विचार खाली मैट्रिक्स की सूचियों में तत्वों को जोड़ने में निहित है। (जैसे सब पहली पंक्ति के तत्वों = सभी कॉलम के पहले तत्व => पहले मैं-वें पंक्ति के सभी तत्वों = सभी कॉलम के आई-वें तत्व)
यह इस सत्र के रूप में मेरे मशीन पर काम करता है प्रोटोकॉल मेरे लिए दिखाता है:
5 ?- transposeMatrix([[1,2],[3,4]],T).
T = [[1, 3], [2, 4]] ;
false.
6 ?- transposeMatrix([[1],[2]],T).
T = [[1, 2]] ;
false.
7 ?- transposeMatrix([[1,2,3],[4,5,6]],T).
T = [[1, 4], [2, 5], [3, 6]] ;
false.
8 ?- transposeMatrix([[1]],T).
T = [[1]] ;
false.
धन्यवाद! मैं एसडब्ल्यूआई प्रोलॉग का उपयोग कर रहा हूं और अपना पहला समाधान करने की कोशिश की। लेकिन जब "use_module (लाइब्रेरी (clpfd) टाइपिंग) टाइप करें।" मुझे निम्न त्रुटि मिलती है: "त्रुटि: स्रोत_सिंक' लाइब्रेरी (clpfd) 'मौजूद नहीं है " क्या आप जानते हैं कि इसे कैसे हल किया जाए? – cody
मुझे लगता है कि या तो आपके पास वास्तव में 'clpfd' लाइब्रेरी नहीं है, या एसडब्ल्यूआई-पीएल की आपकी स्थापना बस्टेड है। 'clpfd.pl' निर्देशिका 'लाइब्रेरी/सीएलपी' (एसडब्ल्यूआई-पीएल होम निर्देशिका के तहत) में रहना चाहिए। यदि यह वहां है, तो शायद एसडब्ल्यूआई-पीएल बस इसे नहीं मिला; इस मामले में, शायद आपके 'pl' निष्पादन योग्य के पास '___। आरसी' कॉन्फ़िगरेशन फ़ाइल का एक अलग नाम है, एसडब्ल्यूआई-पीएल रूट निर्देशिका में भी (वे समान होना चाहिए)। अन्यथा, बस मैंने जो परिभाषा पोस्ट की है, उसका उपयोग करें जो कि 'clpfd' के 'transpose/2' के कार्यान्वयन है। – sharky
ठीक है। पुस्तकालय गायब था और मैंने इसे पुस्तकालय/सीएलपी में कॉपी किया। लेकिन यह अभी भी काम नहीं करता है। मुझे pl-root dir में "plwin.rc" नामक एक फ़ाइल मिली है, और निष्पादन योग्य के साथ एक बिन-फ़ोल्डर है। बिन फ़ोल्डर में .rc को स्थानांतरित करना इसे हल नहीं करता है .. तो क्या मुझे इसे संशोधित करना है? – cody