Recursion 如何在prolog中防止no?

Recursion 如何在prolog中防止no?,recursion,lambda,prolog,prolog-cut,Recursion,Lambda,Prolog,Prolog Cut,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 这个输出是我想要的

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
这个输出是我想要的,但我不想在最后得到一个“否”,因为这会使父函数也失败!
如何删除它并改为“是”呢?

简单的方法:只需添加一个带有空列表的基本案例

myfunc(_, []) :- !.

myfunc(C,[H|T]):-   
    write(C), write(' with '), write(H), nl,
    myfunc(C,T).
测试:


我不知道这是否是最好的方法,但您没有向我们提供有关整个程序的详细信息,因此我选择对谓词进行一点修改。

简单方法:只需添加一个带有空列表的基本情况

myfunc(_, []) :- !.

myfunc(C,[H|T]):-   
    write(C), write(' with '), write(H), nl,
    myfunc(C,T).
测试:


我不知道这是否是最好的方法,但您没有向我们提供有关整个程序的详细信息,因此我选择对谓词进行一点修改。

如果您的Prolog中有maplist,您可以编写

myfunc(N, L) :-
    maplist(my_write(N), L).


my_write(N, Val) :-
    format('~w with ~w~n', [N, Val]).
使用SWI-Prolog和模块


如果Prolog中有maplist,则可以编写

myfunc(N, L) :-
    maplist(my_write(N), L).


my_write(N, Val) :-
    format('~w with ~w~n', [N, Val]).
使用SWI-Prolog和模块