我有这篇文章,我必须在Prolog中编写.要求是编写一段代码来执行二进制加法,例如:
?- add([1,0,1],[1,1],X).
X = [0,0,0,1]
Run Code Online (Sandbox Code Playgroud)
所以,这是我提出的代码:
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),!.
Run Code Online (Sandbox Code Playgroud)
它似乎做了我需要的东西,然而,它有一些我无法理解的奇怪问题,所以如果有人可以指导我做错了什么,我会很高兴的.
结果:
?- add([1,1,1,1], [1,1],Z).
Z = [0, 1, 0, 0, …Run Code Online (Sandbox Code Playgroud)