Lambda 在swi prolog中将字符串列表转换为整数,如图所示

Lambda 在swi prolog中将字符串列表转换为整数,如图所示,lambda,prolog,Lambda,Prolog,如何将字符串列表转换为整数?例如:如果列表是['i','am','fine',],结果应该是[9,14,34](i=9,am=1+13=14,fine=6+9+14+5=34) 如何在SWI Prolog中执行此操作 如果有lambda()模块,则可以编写 :- use_module(library(lambda)). convert(Lst, Val) :- maplist(\X^Y^(atom_codes(X, Ch), foldl(\Z^T^U^(U

如何将字符串列表转换为整数?例如:如果列表是['i','am','fine',],结果应该是[9,14,34](i=9,am=1+13=14,fine=6+9+14+5=34)

如何在SWI Prolog中执行此操作

如果有lambda()模块,则可以编写

:- use_module(library(lambda)).

convert(Lst, Val) :-
    maplist(\X^Y^(atom_codes(X, Ch),
              foldl(\Z^T^U^(U is T + Z-96),Ch, 0, Y)), Lst, Val).
如果有lambda()模块,则可以编写

:- use_module(library(lambda)).

convert(Lst, Val) :-
    maplist(\X^Y^(atom_codes(X, Ch),
              foldl(\Z^T^U^(U is T + Z-96),Ch, 0, Y)), Lst, Val).

该程序可以使用单个内置谓词和该语言的标准递归工具构建

您需要两条规则——一条是将一个列表项逐个转换为另一个列表,另一条是将组成原子的代码相加

每个规则将有两个部分-一个用于处理基本情况(即空列表),另一个用于将传入列表减少一项

下面是一个示例实现,其中包含:

如果要使用and(和)内置谓词进行列表处理,可以按如下方式缩短程序:

sum_atoms(In, Out) :-
    maplist(sum_letters, In, Out).

sum_letters(Atom, Sum) :-
    atom_codes(Atom, Codes),
    maplist(plus(-96), Codes, LetterNumbers),
    sumlist(LetterNumbers, Sum).

.

该程序可以使用一个内置谓词和该语言的标准递归功能构建

您需要两条规则——一条是将一个列表项逐个转换为另一个列表,另一条是将组成原子的代码相加

每个规则将有两个部分-一个用于处理基本情况(即空列表),另一个用于将传入列表减少一项

下面是一个示例实现,其中包含:

如果要使用and(和)内置谓词进行列表处理,可以按如下方式缩短程序:

sum_atoms(In, Out) :-
    maplist(sum_letters, In, Out).

sum_letters(Atom, Sum) :-
    atom_codes(Atom, Codes),
    maplist(plus(-96), Codes, LetterNumbers),
    sumlist(LetterNumbers, Sum).

执行此操作时,我得到以下错误:错误:应用:映射列表/3:未定义的过程:()/3异常:(9)(原子代码(/G1350,/G1360),foldl(/G1369^ G1372^ G1375^(…是…,/G1360,0,/G1353)),我,/G1390)?我不明白。您的SWI Prolog版本是什么?我的是6.3.11,适用于64位的Windows 7。@User111213:maplist(,[A],L)有什么响应?在这样做时,我得到以下错误:错误:应用:maplist\u3:Undefined过程:()/3异常:(9)(原子代码(\uG1350,\uG1360),foldl(\uG1369^ uG1372^ uG1375^(…是…),uG1360,0,\uG1353)),我不明白。您的SWI Prolog版本是什么?我的版本是6.3.11,适用于64位Windows 7。@User111213:maplist(,[A],L)有什么响应?