Манипулировать строками в прологе - PullRequest
0 голосов
/ 20 ноября 2010

У меня есть список стрингов, которыми я должен манипулировать и выписывать. Я получаю струны обычным способом с помощью рекурсии H | Tail. H будет выглядеть примерно так: «оператор (foo, foo2, foo3, foo4, foo5)» Я хочу иметь возможность записывать только foo, foo2, foo3 на отдельных строках

out: foo
bar: foo2
...
...
div: foo5

1 Ответ

1 голос
/ 21 ноября 2010

Преобразование строки в коды, коды в термин, затем деструктурирование термина:

/* SWI Prolog 
*/
read_from_string(String, Term) :-
    string_to_list(String, List),
    read_from_chars(List, Term).

demo:- 
    String="statement(foo, foo2, foo3,foo4,foo5)",
    read_from_string(String, Term),
    Term =.. [Fst,Snd,Thr|Rest],
    write(functor:Fst),nl,
    write(arg1:Snd),nl,
    write(arg2:Thr),nl,
    write(rest:Rest),nl.

Демонстрационный сеанс:

?- demo.
functor:statement
arg1:foo
arg2:foo2
rest:[foo3,foo4,foo5]
true.

Выберите элементы для печати в соответствии с их соответствующими позициямисписок, полученный в результате univ (= ..).Здесь все они были напечатаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...