2016-09-27 5 views
0

Ich bin gut in JAVA, jetzt lerne ich Prolog, es ist so schwer, dass ich Hilfe brauche ... danke. Jedes Element von ABs ist ein Ausdruck der Form A-B, wobei A das entsprechende Element von As ist und B das entsprechende Element von Bs ist.Prolog-zwei Listen, tun die Operation auf die entsprechenden Elemente

zip(As,Bs,ABs):

einige Beispiele:

zip([1,2,3,4],[a,b,c,d],L). 
    L=[1-a,2-b,3-c,4-d]. 

zip(X,Y,[1-a,2-b,3-c]). 
    X=[1,2,3],Y=[a,b,c] 
zip([1,2,3,4],[a,b,c],L). 
fail. 

kann mir jemand helfen. danke ..

Meine Implementierung:

zip(As,Bs,ABs) :- 
    append(X,XS,As), 
    append(Y,YS,Bs), 

das ist, was ich ..

+1

'kombiniert (A, B, AB) .' dann' maplist (kombiniert, As, Bs, ABs) .' – lurker

Antwort

1

Es ist nicht sehr effizient anhängen verwenden done..im verloren haben 3/ist. Man könnte einfach so etwas wie schreiben:

zip([],[],[]). 
zip([H|T],[H1|T1],[H-H1|T2]):-zip(T,T1,T2). 

einige Beispiele:

?- zip([1,2,3,4],[a,b,c,d],L). 
L = [1-a, 2-b, 3-c, 4-d]. 

?- zip(X,Y,[1-a,2-b,3-c]). 
X = [1, 2, 3], 
Y = [a, b, c]. 

?- zip([1,2,3,4],[a,b,c],L). 
false. 
+0

danken dich so sehr. hilft viel! Ich kann einige Ideen bekommen. – newlearner

+0

Ich habe es einfach gemacht, ich denke, ich habe es geschafft.Auf jeden Fall bin ich mit dieser Funktion nicht vertraut.Vielen Dank, P – newlearner

Verwandte Themen