prologでリスト処理

consとappendを書いてみた

cons

?- [user].
|: cons(X,Y,[X|Y]).
|: % user://1 compiled 0.01 sec, 512 bytes
true.

?- listing.
cons(A, B, [A|B]).
true.

?- cons(a,[b,c,d],X).
X = [a, b, c, d].

?-

append

リスト版

?- [user].
|: append(X,[],X).
|: append(X,[Y|YS],[Y|Z]):-append(X,YS,Z).
|: % user://2 compiled 0.01 sec, 372 bytes
true.

?- listing.
append(A, [], A).
append(B, [A|C], [A|D]) :-
        append(B, C, D).
true.

?- append([a,b],[c,d,e],X).
X = [c, d, e, a, b] .

?-

アトム版(というかconsの逆バージョンの名前がわからない)

?- [user].
|: append(X,[],[X]).
|: append(X,[Y|YS],[Y|Z]):-append(X,YS,Z).
|: % user://1 compiled 0.01 sec, 624 bytes
true.

?- append(a,[b,c,d],X).
X = [b, c, d, a] .

?-

おもしろかった。