1
我有一個字符串,如'pen,pencil,eraser'
。我怎樣才能做出這個謂詞。序言字符串操作
things(pen,pencil,eraser).
你有什麼想法嗎? (我用的序言)
如果使用SWI-序言我有一個字符串,如'pen,pencil,eraser'
。我怎樣才能做出這個謂詞。序言字符串操作
things(pen,pencil,eraser).
你有什麼想法嗎? (我用的序言)
如果使用SWI-序言,您可以創建這首: '事情(鋼筆,鉛筆,橡皮)',然後使用term_to_atom/2
所以像:
get_term(Term):-
atom_concat('things(','pen,pencil,eraser',Temp),
atom_concat(Temp,')',A),
term_to_atom(Term, A).
這裏是你的問題應該在大多數實現(不僅是SWI-Prolog的,但GNU Prolog的,SICStus等)工作的專業Prolog的一個小例子:
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).
也許我錯過了什麼,但是什麼是上下文?哪種語言?或者只是邏輯? – 2011-05-04 12:19:47
@ felix-kling:這是序言。 – 2011-05-04 12:20:36
@Hanandel:是的@Ben重播了它......我希望它是正確的;) – 2011-05-04 12:23:15