2
美好的一天,Prolog的树遍历
我想写给定一个树的一个仿函数Prolog的程序:
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,我通过金大运营商处获得正确的价值观,但它似乎里面squareMe要失败
。
当我调用squareMe([P | C],[]),我的理解是P = a和C = [F,2,9]。原子(a)不应该是真的吗?它似乎并非如此,我不知道为什么?
我使用跟踪/ notrace跟踪我的路试,但它肯定是高兴地看到,被传递到squareMe值。那可能吗?我正在使用SWI-Prolog。
TIA, COSON