在prolog中操纵字符串

时间:2010-11-20 20:57:36

标签: string prolog

我有一个我需要操纵和写出的搅拌清单。 我通过H | Tail递归以常规方式得到字符串。 H看起来像“声明(foo,foo2,foo3,foo4,foo5)” 我希望能够在单独的行中只写出foo,foo2,foo3

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

1 个答案:

答案 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 (= ..)产生的列表中各自的位置选择要打印的项目。在这里他们都被打印出来了。