【发布时间】:2018-11-24 14:36:41
【问题描述】:
这是一些将十六进制转换为二进制的程序,我需要得到类似X = [1,1,1,1,0,0,0,0] 的结果pred([f,0])。
所以我需要将所有列表合二为一。谁能告诉我怎么做?
hex(0, [0,0,0,0]).
hex(1, [0,0,0,1]).
hex(2, [0,0,1,0]).
hex(3, [0,0,1,1]).
hex(4, [0,1,0,0]).
hex(5, [0,1,0,1]).
hex(6, [0,1,1,0]).
hex(7, [0,1,1,1]).
hex(8, [1,0,0,0]).
hex(9, [1,0,0,1]).
hex(a, [1,0,1,0]).
hex(b, [1,0,1,1]).
hex(c, [1,1,0,0]).
hex(d, [1,1,0,1]).
hex(e, [1,1,1,0]).
hex(f, [1,1,1,1]).
pred([],X).
pred([H|T],X):-
hex(H,Y),
append(X,Y,X),
write(Y),
nl,
pred(T).
我的问题在追加。
【问题讨论】:
-
append(X,Y,X)说 X 是 X 附加到 Y 的结果。这只有在 Y 为空时才成立。这告诉我你认为你可以在 Prolog 中改变一个变量的值,但你不能,你需要另一个变量。此外,从长远来看,将输出与您的逻辑混合会伤害您。我建议你参考教程!你不能在 Prolog 中使用它。 -
请参阅How do I append lists in Prolog?,确保您了解
append如何以自上而下的方式处理列表。它也适用于此。不是使用您的“附加”行,而是使用pred谓词本身。pred也会以自上而下的方式实例化其二进制列表。
标签: binary prolog hex converter