2

私はプロローグ文を正式な英語文に翻訳するプログラムを書こうとしています。これが私のコードです:

sentence --> [if],[the], first_phrase, second_phrase.
first_phrase -->  predicate, det , assertion, det, noun.
second_phrase --> [then],[the], predicate, det , noun.
assertion --> noun, [and], [the], predicate.
det --> [are].
det --> [is].



noun --> [flat].
noun --> [webbed].
noun -->[waterfowl].
predicate --> [feet].
predicate --> [bill].
predicate -->[order].


sentence(S1,S3) :- first_phrase(S1,S2), second_phrase(S2,S3).
first_phrase(S1,S3) :- second_phrase(S1,S2), noun(S2,S3).
second_phrase(S1,S3) :- assertion(S1,S2), first_phrase(S2,S3).
det([is|X], X).
det([are|X], X).

このコードの出力は次のようになります:X = [if、the、feet、are、flat、and、the、feet、are |…]したがって、いくつかの単語が欠落しているため、次のように表示されます。足は水かきがあり、請求書は平らで、注文は水鳥です。

この結果を得るには、何を追加または修正する必要がありますか?

4

1 に答える 1

0

このコードをソースコードファイルに追加します。

remove_max_depth:-
    current_prolog_flag(toplevel_print_options,Options),
    select(max_depth(_), Options, NOptions)->
    set_prolog_flag(toplevel_print_options, NOptions); true.

:-remove_max_depth.

プロシージャremove_max_depthは、トップレベルに表示するアイテムの最大数に対する制約を取り除き、:-remove_max_depth.ファイルを参照すると、ディレクティブがプロシージャを実行します。

于 2012-12-18T18:01:32.190 に答える