如何从 Prolog 中的数字列表构建数字?
How to build a number from a list of numbers in Prolog?
我是 Prolog 的新手,我试图(没有任何成功)从它的表示中获取一个数字作为数字列表。
例如:
L=[1,2,3] => N=123
我设法构建了这个递归算法,但它说 "Arithmetic Conv is not a function"。有人可以帮我更正吗?
conv([],0).
conv([H|T],R):-
R is H*10+conv(T,R).
conv([E],R):-
R is E.
看看!
它使用 clpfd.
表示纯 Prolog 谓词 n_base10/2
:- use_module(library(clpfd)).
示例查询:
?- n_base10(123, [1,2,3]).
true.
?- n_base10(123, Ds).
Ds = [1,2,3].
?- n_base10(N, [1,7,9]).
N = 179
; false.
?- n_base10(459183754813957135135239458256, Ds).
Ds = [4,5,9,1,8,3,7,5,4,8,1,3,9,5,7,1,3,5,1,3,5,2,3,9,4,5,8,2,5,6].
我是 Prolog 的新手,我试图(没有任何成功)从它的表示中获取一个数字作为数字列表。 例如: L=[1,2,3] => N=123 我设法构建了这个递归算法,但它说 "Arithmetic Conv is not a function"。有人可以帮我更正吗?
conv([],0).
conv([H|T],R):-
R is H*10+conv(T,R).
conv([E],R):-
R is E.
看看
它使用 clpfd.
表示纯 Prolog 谓词n_base10/2
:- use_module(library(clpfd)).
示例查询:
?- n_base10(123, [1,2,3]).
true.
?- n_base10(123, Ds).
Ds = [1,2,3].
?- n_base10(N, [1,7,9]).
N = 179
; false.
?- n_base10(459183754813957135135239458256, Ds).
Ds = [4,5,9,1,8,3,7,5,4,8,1,3,9,5,7,1,3,5,1,3,5,2,3,9,4,5,8,2,5,6].