2011-05-04 86 views
1

我有一個字符串,如'pen,pencil,eraser'。我怎樣才能做出這個謂詞。序言字符串操作

things(pen,pencil,eraser). 

你有什麼想法嗎? (我用的序言)

如果使用SWI-序言
+0

也許我錯過了什麼,但是什麼是上下文?哪種語言?或者只是邏輯? – 2011-05-04 12:19:47

+0

@ felix-kling:這是序言。 – 2011-05-04 12:20:36

+0

@Hanandel:是的@Ben重播了它......我希望它是正確的;) – 2011-05-04 12:23:15

回答

2

,您可以創建這首: '事情(鋼筆,鉛筆,橡皮)',然後使用term_to_atom/2

所以像:

get_term(Term):- 
    atom_concat('things(','pen,pencil,eraser',Temp), 
    atom_concat(Temp,')',A), 
    term_to_atom(Term, A). 
4

這裏是你的問題應該在大多數實現(不僅是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).