如何从Prolog中的数字列表构建数字?

时间:2015-11-04 13:21:03

标签: list prolog clpfd

我在Prolog中很新,我正在尝试(没有任何成功)从它的表示中获取一个数字作为数字列表。 例如: L = [1,2,3] => N = 123 我设法构建这个递归算法,但它是“算术转换不是一个函数”。有人可以帮我纠正吗?

    conv([],0).
    conv([H|T],R):-
         R is H*10+conv(T,R).
    conv([E],R):-
         R is E.

1 个答案:

答案 0 :(得分:1)

看看this answer to a recent related question

它使用呈现纯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].