2015-11-04 10 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 много человек –