2012-04-08 2 views
2

Ну, так как я практикую «логику Пролога» сегодня, и я нашел эту неотвеченную проблему в другом потоке здесь, мне было интересно, как это работает.Принудительные элементы в SWI-Prolog

приращение каждый элемент списка по глубине, например, приращение ([0,0, [0]], [1,1, [2]]) -> истинный

И я почти думал, что мне нравится этот язык ... :)) Возможно ли это? Благодарю.

+0

Если вы получите его и ответить на вопрос, я обязательно upvote вас :) – CapelliC

+0

его можно, но для конечно, это не будет короткий предикат – whd

+0

четыре статьи ниже кажутся довольно короткими –

ответ

2

Следующий код делает работу:

increment(X,Y):- increment(X,0,Y). 
increment([],_,[]) :- !. 
increment([X|Xs],N,[Y|Ys]) :- !, N1 is N+1, 
           increment(X,N1,Y), increment(Xs,N,Ys). 
increment(X,N,Y):- Y is X+N. 

Просто, чтобы проверить его

?- increment([0,0,[0]],X). 
X = [1, 1, [2]]. 

?- increment([0,0,[0,[0,0]]],X). 
X = [1, 1, [2, [3, 3]]]. 
+0

Wow, smart! Я отправил вам электронное письмо, сэр @Alexander –

+0

Я постараюсь ответить на него сегодня вечером, сэр @Norbert ;-) –

Смежные вопросы