1

プロローグ、再帰関数: リストの各要素を含む 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

この出力は私が望むものですが、親関数も失敗するため、最後に「いいえ」を取得したくありません! どうすればそれを削除して代わりに「はい」を入れることができますか?

4

2 に答える 2

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.

これが最善の方法かどうかはわかりませんが、プログラム全体についてあまり詳細を教えてくれなかったので、述語を少し変更することにしました。

于 2012-11-30T20:04:03.237 に答える
2

Prologにマップリストがある場合、次のように書くことができます

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).
于 2012-11-30T21:46:50.463 に答える