2
私はいくつかの音節を合計したすべての単語の組み合わせをリストに入れようとしています。たとえば、2つの単語の組み合わせを返すhas_5_syllables
この場合Prolog:合計X音節の単語のリストを取得する
w(cat, noun, 1).
w(boy, noun, 1).
w(pet, noun, 1).
w(eats, verb, 1).
w(woman, noun, 2).
w(nature, noun, 2).
w(apple, noun, 2).
w(watches, verb, 2).
w(family, noun, 3).
has_5_syllables(L) :-
w(X, _, N0),
w(Y, _, N1),
plus(N0, N1, 5),
append([X], [Y], L).
:
?- has_5_syllables(X).
X = [woman, family] ;
X = [nature, family] ;
X = [apple, family] ;
...
は、そこで問題は、それはまた、2つの以上の単語の組み合わせを返しますので、私は述語を拡張する方法、です、例えば[cat, boy, family], [cat, boy, pet, apple]
?あなたが述語に音節の和としてNを渡すことができるように
理想的には私も、それは一般的な作りたい:has_n_syllables(L, N).
これは素晴らしい!正直言って私は非常に冗長な解決策を期待していましたが、 '' 'subset_set''の実装さえかなり軽いです。しかし、私はPrologにはとても新しいので、すべてが非常にあいまいです。何が起こっているのかを理解するためにいくつかのコメントを追加してもよろしいですか?ありがとう! – skamsie
これはあいまいではありませんが、解空間の網羅的な検索です。 subset_set可能なすべての既知の単語の組み合わせを得るためのキーです。また、findallもシラバスの数を集めたので、単語を分けてカウンターを合計するだけで十分です。解空間全体を視覚化するために '' has_n_syllables(L、N)、writeln(L/N).'を試すことができますforallによって誘発されたバックトラックに印刷された各単語群の解があります。 – CapelliC