Двойные элементы в списке от N до N, код дает false - PullRequest
0 голосов
/ 23 января 2019

В качестве входных данных у меня есть список чисел, и мне нужно сгенерировать новый список с элементами от N до N, удвоенными. Например:

?-double([1,2,3,4,5,6,7],2,L). returns L=[1,2,2,3,4,4,5,6,6,7] (in this case N=2)

?-double([1,2,3,4,5,6,7],3,L). returns L=[1,2,3,3,4,5,6,6,7] (in this case N=3)

Я придумал следующий код:

double(List, N, L) :- double(List, N, 1, L).

double([], N, Index, L).

double([H|T], N, Index, [H,H|L]) :-
    Index =:= N,
    double(T,N,1,L).

double([H|T], N, Index, [H|L]) :-
    Index =\= N,
    newIndex is Index + 1,
    double(T,N,newIndex,L).

К сожалению, мой код возвращает false. Ребята, вы можете указать на ошибку? Спасибо!

1 Ответ

0 голосов
/ 23 января 2019

В вашем коде есть две опечатки:

  1. В базовом случае замените L на [].

  2. Inво втором рекурсивном предложении замените newIndex на NewIndex.

Т.е. когда список ввода пуст (или при достижении конца списка после обработки его элементов), выводсписок будет также пустым списком.Переменные в Прологе начинаются с символа подчеркивания или заглавной буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...