【发布时间】:2016-11-20 15:22:32
【问题描述】:
美好的一天,
我正在尝试编写一个 Prolog 程序,该程序给出一棵具有 a 函子的树:
start(a(f,2,9), X).
我希望它对内部的任何值进行平方,以便产生:
X = a(f,4,81).
我已经有代码可以对列表中的数字进行平方运算。 到目前为止,这是我所拥有的:
start([],[]).
start(Tree, []) :- Tree =.. [P|C], write(P), nl, write(C), nl, squareMe([P|C], []).
squareMe([X|T], [Y|Result]) :- % I think the problem is here
atom(X),
Y=X,
squareMe(T, Result).
squareMe([X|T], [Y|Result]) :-
number(X),
Y is X * X,
squareMe(T, Result).
squareMe([], []).
当代码写入 P 和 C 时,我确实通过 UNIV 运算符获得了正确的值,但它似乎在 squareMe 中失败了。
当我调用 squareMe([P|C], []) 时,我的理解是 P = a 和 C = [f, 2, 9]。那么 atom(a) 不应该是真的吗?似乎不是这样,我不知道为什么?
我尝试过使用 trace/notrace 来跟踪我的路径,但如果能看到传递给 squareMe 的值肯定会很好。那可能吗?我正在使用 SWI-Prolog。
TIA, 科森
【问题讨论】:
标签: tree prolog constants evaluation