嵌套列表中的SWI-Prolog访问元素

时间:2017-05-03 16:12:36

标签: list prolog swi-prolog dcg

我的问题可能很难解决,但我是没有经验的Prolog程序员。我尝试做的是一个能够接受一些复杂的价值链的DCG。

output(S) --> type(T), some(So), other(O), things(Th), strings(Sr) 
             {concat_atom(["A word ", T, So, O, Th, Sr], S)}.

strings(C) --> chars(C).

string_or_empty(C) --> "", {concat_atom([], C)}.

string_or_empty(C) --> string(C).

chars(C)           --> char(C1), chars(Rest), {concat_atom([C1, Rest], C)}.

chars(C)           --> char(C).

char(C)            --> [C1], {code_type(C1, alnum), atom_codes(C, [C1])}.

alpha_char(C)      --> [C], {code_type(C, alpha)}.

当我像strings这样致电strings(S, ['a', 'b', 'c'], []).时,我得到预期的结果S = abc.

然而,当我打电话给output(S, ["type", "smth", "ot", "th", ['a', 'b', 'c']], []).时,我得到" false"。它的工作原理是它试图检查整个字母列表是否是一个字符。

  

致电:(12)code_type([a,b,c],alnum)?爬行   错误:输入错误:'字符'预期,发现' [a,b,c]' (清单)

我怎么能逃避这个?

0 个答案:

没有答案