我有这个作业,我必须在 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 时,在某些情况下(仍在尝试找出它们),似乎没有返回任何结果。但我似乎无法找到我的错误。如果有人会很高兴可以告诉我我做错了什么。