我有一个我需要操纵和写出的搅拌清单。 我通过H | Tail递归以常规方式得到字符串。 H看起来像“声明(foo,foo2,foo3,foo4,foo5)” 我希望能够在单独的行中只写出foo,foo2,foo3
out:foo
bar:foo2
...
...
div:foo5
答案 0 :(得分:1)
将字符串转换为代码,将代码转换为术语,然后对术语进行解构:
/* 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 (= ..)产生的列表中各自的位置选择要打印的项目。在这里他们都被打印出来了。