如何在prolog中解析argv

时间:2017-03-28 14:27:37

标签: prolog swi-prolog

当我试图将列表传递给Prolog程序时,我在argv中得到一个字符串。我需要从这个字符串中以某种方式恢复列表或找到传递列表的方法。 感谢。

编辑:我尝试过opt_arguments,但是我收到了这个错误:

  

“错误:validate_opts_spec / 1:输入错误:flag_value' expected, found term'(一个原子)(选项'Transactions'中的未知类型'term')”。

1 个答案:

答案 0 :(得分:0)

在Linux上:

$ swipl [a,b,c]
Welcome to SWI-Prolog (threaded, 64 bits, version 7.5.1-31-gd53ee81)
...

然后

?- current_prolog_flag(argv, Argv),Argv=[L|_],atom_to_term(L,T,[]).
Argv = ['[a,b,c]'],
L = '[a,b,c]',
T = [a, b, c].

在@Boris评论之后,这是一个更好的方法,从某种意义上说它涵盖了两种情况

$ swipl [a, b, c]
Welcome to SWI-Prolog (threaded, 64 bits, version 7.5.1-31-gd53ee81)
...
?- current_prolog_flag(argv, Argv),atomic_list_concat(Argv,Atom),atom_to_term(Atom,Term,[]).
Argv = ['[a,', 'b,', 'c]'],
Atom = '[a,b,c]',
Term = [a, b, c].