Prolog,递归函数: 我希望它用列表中的每个元素打印C. 例如:C = 30且[H | T] = [ - 9,-10,-30]
myfunc(C,[H|T]):-
(\+([H|T]=[])),
write(C), write(' with '), write(H), nl,
myfunc(C,T).
我在开头检查列表的头部是否为空。它给了我这个输出
30 with -9
30 with -10
30 with -30
(32 ms) no
这个输出是我想要的,但我不想在最后得到'不',因为这使得父功能也失败了! 我怎样才能将其删除并改为“是”?
答案 0 :(得分:3)
简单方法:只需添加一个带有空列表的基本案例。
myfunc(_, []) :- !.
myfunc(C,[H|T]):-
write(C), write(' with '), write(H), nl,
myfunc(C,T).
试验:
?- myfunc(30, [1, 2, 3]).
30 with 1
30 with 2
30 with 3
true.
我不知道这是否是最好的方法,但是您没有向我们提供有关整个程序的详细信息,所以我选择对您的谓词进行一些小修改。
答案 1 :(得分:2)
如果你的Prolog中有maplist,你可以写
myfunc(N, L) :-
maplist(my_write(N), L).
my_write(N, Val) :-
format('~w with ~w~n', [N, Val]).
使用SWI-Prolog和模块lambda
:- use_module(library(lambda)).
myfunc(N, L) :-
maplist(\X^format('~w with ~w~n', [N, X]), L).