Пролог Струнные манипуляции - PullRequest
1 голос
/ 04 мая 2011

У меня есть строка типа 'pen,pencil,eraser'. Как я могу сделать этот предикат.

things(pen,pencil,eraser).

Есть идеи? (Я использую пролог)

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

Вот небольшой пример специализированного кода Prolog для вашей задачи, который должен работать на большинстве реализаций (не только SWI-Prolog, но и GNU Prolog, SICStus и т. Д.):

make_term(Functor, StringArgs, Term) :-
    split_atom(StringArgs, ',', Args),
    Term =.. [Functor|Args].        

split_atom(A, E, L) :-
    atom_chars(A, C),
    split_atom2(C, E, L).

split_atom2([], _, []).
split_atom2(C, E, [A|L]) :-
    append(C0, [E|C1], C), !,
    atom_chars(A, C0),
    split_atom2(C1, E, L).
split_atom2(C, _, [A]) :-
    atom_chars(A, C).

Тестирование:

?- make_term(things, 'pen,pencil,eraser', T).
T = things(pen, pencil, eraser).
2 голосов
/ 04 мая 2011

если вы используете swi-prolog, вы можете сначала создать его: «вещи (ручка, карандаш, ластик)», а затем использовать term_to_atom / 2

так что-то вроде:

get_term(Term):-
    atom_concat('things(','pen,pencil,eraser',Temp),
    atom_concat(Temp,')',A),
    term_to_atom(Term, A).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...