我在findall的列表中有我的答案,列表叫做答案。 现在答案可以包含0个,1个或更多项目。
0回答我可以用display_answers([])来解决。
我可以用display_answer([X])解决1个答案。
我可以做多于1个display_answer([X | X]),然后使用foreach打印所有答案吗? 或者有更好的方法吗?
鲁洛夫
Edit1: 我试过这个:
% Displays the output of siblings(X,Y) and takes care that
% there are no duplicates.
display_siblings(Person) :-
findall(Person-Y, siblings(Person,Y), Sibs),
display_the_siblings(Sibs).
% Display a message if there are no siblings found.
display_the_siblings([]) :-
write('Er zijn geen zussen/broers bekend').
% Displays a message if one sibling is found.
display_the_siblings([X-Y]) :-
write('The enigste broer of zuster is '),
write(Y).
% Display a message if there are more then 1 siblings found.
display_the_siblings([[X-Y|X-Y]) :-
write('Alle zusterparen zijn : \n'),
但如果我使用递归,那么当Sibs为1时,则使用错误的谓词。 所以问题仍然是我作为参数使最后一个谓词工作。
答案 0 :(得分:0)
我的序言有点生疏,但一般来说,你使用[Head | Tail]在列表中进行递归。类似的东西:
display_answer([]) :- !.
display_answer( [Head|Tail] ) :-
print( Head ),
display_answer( Tail ).
希望它有所帮助。玩得开心......
答案 1 :(得分:0)
我的〜/ .plrc(Linux上的SWI-Prolog基本配置文件)这个定义
setln(Pattern, Goal) :-
setof(Pattern, Goal, List), maplist(writeln, List).
只允许对解决方案进行排序显示,以备我需要时...例如
?- setln(M, current_module(M)).
ansi_term
apply
arithmetic
base32
...