为什么下面的简单程序不起作用?
main :-
squares([1,2,3,4,5], L),
writeln(L).
squares([H|T], Outl) :-
Sq is H*H,
squares(T, [Sq|Outl]).
squares([], []).
输出为:
?- main.
false.
用 [Outl]
替换 Outl
(在 squares([H|T], Outl)
中)没有帮助。
使用 =
和 #=
代替或 is
也没有帮助。
也没有用squares([], P)
代替squares([], [])
。
最佳答案
这是 maplist
的绝佳候选者。
定义一个元素的平方:
squared(X, XX) :- XX #= X * X.
然后应用maplist
:
squared_list(L, LL) :- maplist(squared, L, LL).
通过在这里使用 #=
而不是 is/2
,它的行为更加相关:
| ?- squared_list([1,2,3], L).
L = [1,4,9]
yes
| ?- squared_list(L, [1,4,9]).
L = [1,2,3] ? ;
(1 ms) no
| ?-
关于list - Prolog 中的简单平方程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177232/