Prolog中简单的方形程序

时间:2016-07-04 05:00:27

标签: list prolog

为什么关注简单程序不起作用?

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([], [])

2 个答案:

答案 0 :(得分:4)

这是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
| ?-

答案 1 :(得分:1)

看看你写的是什么

squares([H|T],Outl):-
    Sq is H*H,
    squares(T,[Sq|Outl]).

Sq错位,你应该写

squares([H|T],[Sq|Outl]):-
    Sq is H*H,
    squares(T,Outl).

在计算列表T的其余部分的结果中添加Sq。