Хорошего дня,Пролог Tree Traversal
Я пытаюсь написать программу на Пролог, что данное дерево с функтором:
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]. Итак, не должен ли атом (а) быть правдой? Кажется, это не так, и я не уверен, почему?
Я пробовал использовать trace/notrace для отслеживания моего пути, но было бы неплохо увидеть значения, которые были переданы в squareMe. Это возможно? Я использую SWI-Prolog.
ТИА, Coson