2011-11-29 8 views
5

मैं खोज और प्रतिस्थापन द्वारा एक सूची को संशोधित करने का प्रयास कर रहा हूं, यह सोच रहा था कि खोज सूची के साथ सूची के रूप में मैं सूची के माध्यम से कैसे खोज करूं?प्रोलॉग में किसी अन्य उपन्यासकार के साथ सूची की खोज और प्रतिस्थापन कैसे करें?

चलें कहते हैं कि मैं एक सूची [1,2,3,4] मैं 2 और 3 खास तौर और 5,6 साथ इसे बदलना चाहते है तो आदर्श रूप मैं एक विधेय हो सकता है:

search_and_replace(Search_Term, Replace_Term, Target_List, Result_List). 

eg. 

search_and_replace([2,3], [5,6], [1,2,3,4], Result_List), write(Result_List). 

उत्तर

4

आप संलग्न/2 उपयोग कर सकते हैं एक बार/1 यदि आप सभी possibilies चाहते हैं या नहीं।

replace(ToReplace, ToInsert, List, Result) :- 
    replace(ToReplace, ToInsert, List, [], Result). 
replace(ToReplace, ToInsert, List, Acc, Result) :- 
    append([Left, ToReplace, Right], List), 
    append([Acc, Left, ToInsert], NewAcc), 
    !, 
    replace(ToReplace, ToInsert, Right, NewAcc, Result). 
replace(_ToReplace, _ToInsert, [], Acc, Acc). 
+0

हम्म .. मैंने देखा कि भविष्यवाणी केवल खोज और प्रतिस्थापित करती है, आप वैश्विक स्तर पर सभी शर्तों पर कैसे लागू होते हैं? – chutsu

+1

@chutsu मैंने संपादित किया। – m09

+0

बहुत बहुत धन्यवाद :) – chutsu

6

मुझे लगता है कि आप किसी अन्य सूची द्वारा किसी सूची में अनुवर्ती प्रतिस्थापित करना चाहते हैं।

यह एक सामान्य तरीका है कि यह कैसे करें। आप प्रोग्राम में और शर्तों को सम्मिलित करना चाहेंगे।

replacement(A, B, Ag, Bg) :- 
    phrase((seq(S1),seq(A),seq(S2)), Ag), 
    phrase((seq(S1),seq(B),seq(S2)), Bg). 

seq([]) --> []. 
seq([E|Es]) --> [E], seq(Es). 

और, हाँ यह थोड़ा अनुकूलित किया जा सकता है - यहां तक ​​कि अपनी समाप्ति संपत्ति लाभ होगा। लेकिन वैचारिक स्पष्टता एक काफी कीमती मूल्य

है ... संपादित करें: आपका उदाहरण क्वेरी:

replace(ToReplace, ToInsert, List, Result) :- 
    once(append([Left, ToReplace, Right], List)), 
    append([Left, ToInsert, Right], Result). 

के साथ या उपयोग के बिना: इस प्रकार

?- replacement([2,3], [5,6], [1,2,3,4], Xs). 
Xs = [1, 5, 6, 4] ; 
false. 
+2

बहुत अच्छा, DCG सुंदर मेरे लिए नया है, लेकिन यह एक सुरुचिपूर्ण समाधान की तरह लगता है:

सभी आवृत्तियां मैं की तरह कुछ के साथ जाना चाहते हैं बदलने के लिए। – chutsu

संबंधित मुद्दे

 संबंधित मुद्दे