私は Prolog を初めて使用し、その一部を理解するのに大きな問題があります。たとえば、私はこの「関数」を持っています:
smstofre([], []).
smstofre([T|R], [X|Y] :- frword(T,X), smstofre(R,Y).
次の「データベース」を使用:
frword(bjr,bonjour).
これは、下手に書かれたフランス語の文章を正しい文章に翻訳するために使用されます。私はそれを次のように使用します:
?- smstofre([bjr],E).
E = [bonjour].
これはクールですが、単純な文字列を受け取り、単語を分割して、前の「関数」と同じ結果を返す「関数」を作成したいと思います。たとえば、次のようになります。
?- translate('bjr cb ?', E).
返す必要があります:
E = [bonjour,combien,?].
私はswi-prologの関数atomic_list_concatを使用して文字列を分割し、他のすべてを実行する関数を作成しようとしたので、それを行いました:
reduireFosse(E, F) :- atomic_list_concat(F,' ', E), smstofre(F, E).
false を返すだけです。
それを機能させる方法は?