Я работаю над небольшим проектом, чтобы опираться на пролог. То, что я пытаюсь сделать прямо сейчас, - это предложение, которое возвращает список слов. Итак, я беру массив символов, например. «максимумы и минимумы», и пытается разбить его на «максимумы» и «минимумы». Я использую массив символов, потому что я хочу играть со своими словами, и я не думаю, что для этого работают строки.Как я могу разбить список в прологе, учитывая точку опоры?
Вот мой код.
get_first_word([], _, []):-
!.
get_first_word(X, Pivot, Input):-
append(X, [Pivot|_], Input),
!.
split_at([],_).
split_at(Input, Pivot):-
get_first_word(X, Pivot, Input),
writef(X),
append(X, Y, Input),
split_at(Y, Pivot).
Проблема, которую я получаю, заключается в том, что это превращается в бесконечный цикл. В конце концов, он пройдет пустой ввод, и мой базовый регистр недостаточно хорошо написан, чтобы справиться с этим. Как это исправить?
В случае, если вы планируете использовать SWI-Prolog, вы можете захотеть использовать атомы для представления слов и предложений. Затем вы можете использовать встроенные модули для анализа и построения атомов (http://www.swi-prolog.org/pldoc/doc_for?object=section(2,'4.21',swi('/doc/Manual/ manipatom.html '))), например 'atomic_list_concat/3', что в основном делает именно то, что вы описываете для атомов. –
Я пытаюсь сделать простой сценарий перевода, и мне нужно будет играть с отдельными словами и словом. Могу ли я «собрать» строки с помощью SWIProlog? – UrhoKarila
см. Мой ответ ниже –