私はPrologで書かなければならないこの宿題を持っています。要件は次のようなバイナリ加算を行うコードを書くことです:
?- add([1,0,1],[1,1],X).
X = [0,0,0,1]
そして、これは私が思いついたコードです:
add([],[], _).
add([],Y, Z) :- append([], Y, Z).
add(X,[], Z) :- append(X,[],Z).
add([HX|TX],[HY|TY], Z) :-
HX = 1,
HY = 1,
add(TX,TY, Z1),
add([1],Z1, Z2),
append([0],Z2,Z),!.
add([HX|TX],[HY,TY], Z) :-
HX = 0,
HY = 1,
add(TX,TY,Z1),
append([1],Z1, Z),!.
add([HX|TX],[HY|TY], Z) :-
HX = 1,
HY = 0,
add(TX,TY,Z1),
append([1],Z1, Z),!.
add([HX|TX],[HY,TY], Z) :-
HX = 0,
HY = 0,
add(TX,TY,Z1),
append([0],Z1, Z),!.
必要なことはやっているようですが、なかなかわからない不思議な問題がありますので、誰かが間違ったことを教えてくれたら嬉しいです。
結果:
?- add([1,1,1,1], [1,1],Z).
Z = [0, 1, 0, 0, 1]. % this is correct
?- add([1], [1],Z).
Z = [0, 1]. % this is correct
?- add([1,1,0,1], [1,1],Z).
Z = [0, 1, 1, 1]. % this is correct
?- add([1],[0],Y).
Y = [1|_G7100]. % there is an error here, but its not the big issue.
?- add([1,0,1], [1,1],Z).
false. % no results are returned.
104 ?- add([0], [1],Z).
false. % no results returned either
問題:最初のバイナリリストに0があるように見えるときはいつでも、いくつかの条件下で(まだそれらを理解しようとしている)、結果が返されないようですが、エラーを見つけることができないようです。誰かが喜んでいるでしょう私が間違ったことを教えてくれます。