перевести пролог на официальный английский

Я пытаюсь написать программу, которая переводит предложение пролога в формальное английское предложение. вот мой код:

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, foot, are, flat, and, the, feet, are|…] поэтому в нем отсутствуют некоторые слова, где он должен отображать что-то вроде этого: Если лапы перепончатые, а клюв плоский, то отряд водоплавающих.

что я должен добавить или исправить, чтобы получить этот результат?


person Muhsag    schedule 16.12.2012    source источник
comment
см. этот вопрос   -  person CapelliC    schedule 16.12.2012
comment
это работает, но я хочу что-то добавить в код файла.   -  person Muhsag    schedule 17.12.2012


Ответы (1)


Добавьте этот код в файл исходного кода:

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. выполнит процедуру, когда вы обратитесь к файлу.

person gusbro    schedule 18.12.2012
comment
LOL, я тоже неправильно понял вопрос. Я думаю, что Mohannad ищет покрытие поколения DCG... - person CapelliC; 19.12.2012