2016-08-01 2 views
1

Мне нужна помощь в выяснении того, что не так с моим предикатом, чтобы удвоить все элементы списка. Я новичок в Prolog и, скорее всего, пропущу что-то очень очевидное. В основном мой предикат должен взять список (например, [1, 2, 3]) и создать список, в котором элементы удваиваются ([2, 3, 6]).Удвоение всех элементов в списке в Prolog

Вот то, что я до сих пор:

double_elements([], []). 
double_elements([H|T], Doubled_list):- 
    X is H*2, 
    append([X], Doubled_list, Doubled_list), 
    double_elements(T, Doubled_list). 

Однако, мой код в настоящее время просто не выдает «ложные» независимо от того, какие входы Даю. Любая помощь будет оценена по достоинству.

+0

Go посмотреть документацию для 'Append ([X], Doubled_list, Doubled_list)'. Вы пытаетесь добавить '[X]' к чему-то и объединить его с тем же. Это всегда будет терпеть неудачу. – Enigmativity

+0

В Prolog вы не можете обновлять одну и ту же переменную в предложении предиката. – lurker

ответ

2

Вы пытаетесь добавить [X] к чему-то и объединить его с тем же. Это всегда будет терпеть неудачу.

Попробуйте вместо этого:

double_elements([], []). 
double_elements([H|T], [X|Doubled_list]):- 
    X is H*2, 
    double_elements(T, Doubled_list). 
+1

@ lurker - Очень верно, простите за каламбур. – Enigmativity

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