2016-12-19 2 views
0

Мне нужно написать рекурсию в прологе, которая добавляет элементы из двух списков. Предположим, у нас есть список, A = [a,b,c] и B = [d,e,f], а окончательный список, R, должен выглядеть так: R = [a+d, b+e, c+f].Рекурсия списка прологов, добавьте элементы в список

я придумал только с этим:

xxx([a], [b], [a+b]). 
xxx([H1|T1], [H2|T2], W) :- xxx(T1, T2, W), .(H1+H2, W). 

Но это дает мне uncaught exception: error(syntax_error('user_input:5 (char:15) expression or ] expected in list'),read_term/3). Я также попытался это:

xxx([a], [b], [a+b]). 
xxx([H1|T1], [H2|T2], W) :- xxx(T1, T2, W), append(H1+H2, W, []). 

без успеха: uncaught exception: error(syntax_error('user_input:4 (char:16) expression or ] expected in list'),read_term/3)

Im использованием Gnu пролог (gprolog)

+0

Обратите внимание, что оператор точек '.' для построения списков обычно скрыт; вам нужно сделать «трюк», чтобы иметь возможность использовать его. Вероятно, это то, что дает синтаксическую ошибку. –

ответ

2
xxx([], [], []). 
xxx([E|Es], [F|Fs], [E+F|EFs]) :- 
    xxx(E, F, EFs). 

или

..., maplist(ex, Es, Fs, EFs), ... 

ex(E, F, E+F). 

или

..., maplist(\E^F^(E+F)^true, Es, Fs, EFs), ... 

с использованием library(lambda)

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