你好,
我正在尝试编写一个Prolog程序,该程序给定一个带有a作为functor的树:
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, coson