gpt4 book ai didi

recursion - Prolog 程序 to convert(L,X) 将列表 L 转换为整数 : x1 + x2*10^1+ … + xn*10^(n-1)

转载 作者:行者123 更新时间:2023-12-04 05:21:34 24 4
gpt4 key购买 nike

我的问题:给出一个列表

L = [x1,...,xn]

编写 Prolog 程序 convert(L,X)转换 L到一个整数
x1*10^0 + x2*10^1 + ... + xn*10^(n-1)

将结果存储在 X .

例如
?- convert( [1,2,3,4] , Res ).
Res = 4321.

我试图解决这个问题,但我在尝试使用内置的幂函数时遇到语法错误。这是我到目前为止:
convert([],Res) .
convert(L1,Res) :- conv( L1 , Res , C ) .

conv( [] , Res , C ) .
conv( [H|Ys] , Res , C ):-
C1 is C-1 ,
N is (H*(10**C)) ,
conv(Ys,Res2,C1) ,
Res is N + Res2 .

我收到此错误:
******* syntax error
>>> conv ( [ H | Ys ] , Res , C ) :- C1 is C - 1 , N is ( H * ( 10 <--- HERE? >>>

所以有人可以告诉我如何摆脱这个错误?

另外有没有什么办法让我在语法上出错??

请帮我解决这个问题。谢谢。

最佳答案

当您使用 SWI-Prolog 时,这有效:

:- use_module(library(lambda)).

convert(L,Res) :-
reverse(L, LR),
foldl(\X^Y^Z^(Z is Y * 10 + X), LR, 0, Res).

对于您的代码:
convert([],Res) . <== Here Res is a free variable
convert(L1,Res) :-conv(L1,Res,C). <== here C is free

conv([],Res,C). <== Here Res anc C are free

这是行不通的;你可以试试
conv([],0).
conv([H|Ys],Res):-
conv(Ys,Res2),
Res is Res2 * 10 + H.

关于recursion - Prolog 程序 to convert(L,X) 将列表 L 转换为整数 : x1 + x2*10^1+ … + xn*10^(n-1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com