好吧,我正在为算术方程编码解析器。我在列表中获得输入,例如"10+20" = [49,48,43,50,48]
,然后我将所有数字转换成那里的相应数字,例如[49,48,43,50,48] = [1,0,43,2,0]
并从那里我想把整数> 10回到一起。Prolog分类列表
从ascii转换 - >数字我使用maplist和number_codes进行转换。
我的一种方法是遍历列表,如果它是0-9将它存储在一个变量中,然后检查下一个数字,0-9将它附加到另一个变量,依此类推直到我碰到一个操作符。我似乎无法像原来那样简单地附加数字。这是我目前的代码。
expression(L) :-
maplist(chars, L, Ls).
chars(C, N) :-
(
C >= "0", "9" >= C -> number_codes(N, [C]);
N is C
).
不知道是否有一个简单的方法添加到我的代码(据我所知,只有MAPLIST还给长度相等的列表中传递的列表,但我可能是错误的)。
任何帮助表示赞赏:)
string_to_atom不存在于sicstus? – WhaleFanny
@WhaleFanny我没有与sicstus合作;也许你需要包括一个库或检查类似的谓词 –
['atom_codes/2'](http://www.swi-prolog.org/pldoc/doc_for?object=atom_codes/2)是ISO Prolog,似乎按照'string_to_atom/2'的要求来做 – m09