次のリストを検討してください。
[my、name、is、jack、baur]
これを次のパターンに統合したいと思います。
[my、name、is、Name]
そのため、変数Nameの値は最終的に「jackbaur」になります。変数はここではある種のワイルドカードとして機能しており、不明な数のアトム/リストメンバーと統合する必要があります。
重要:
- 変数/ワイルドカードが常に最後にあるとは限りません
- 複数の変数/ワイルドカードが存在する可能性があります
現在、私はこのようなものを持っています:
rule([my,name,is,Name],[hello,Name]).
% Sentence is a list (e.g. [my,name,is,jack,baur]
answer(Sentence,Response) :-
rule(Sentence,ResponseList),
atomic_list_concat(ResponseList,' ',Response).
明らかに、これName
は、が2つではなく、正確に1つの単語である場合にのみ機能します。
Prologでこの問題にどのようにアプローチしますか?