我有这篇文章,我必须在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, 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
Run Code Online (Sandbox Code Playgroud)
问题:每当第一个二进制列表中似乎有0时,在某些条件下(仍然试图弄清楚它们),似乎没有返回结果.但我似乎无法找到我的错误.如果有人会很高兴可以告诉我我做错了什么.
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |