2015-11-04 52 views
1

我是Prolog的新手,我試圖(沒有任何成功)從它的表示中獲得一個數字作爲數字列表。例如: 例如: L = [1,2,3] => N = 123 我設法建立了這個遞歸算法,但它卻是「算術轉換不是函數」。有人可以幫我糾正它嗎?如何從Prolog中的數字列表構建一個數字?

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

回答

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]. 
+1

thaks很多人 –

相關問題