Пролог Аргументы не достаточно созданы, R является [H|R1]

Я прочитал несколько вопросов, которые представляют собой идентичный вопрос, но с другим кодом, к сожалению, еще один опубликован.

Я слежу за своими замечаниями профессоров и моделирую оператор вставки, идентичный их факторной функции, как показано здесь.

factorial(0, 1).
factorial(N, F) :-  
   N > 0,
   N1 is N – 1,
   factorial(N1, F1),
   F is N * F1.

и моя функция вставки

insertPos(V, 0, [H|T], [V|[H|T]]).
insertPos(V, N, [H|T], R) :-
   N > 0, 
   N1 is N-1,
   insertPos(V, N1, T, R1),
   R is [H|R1].

Ошибка выдается на R является [H|R1] который я надеялся получить R1 от моего insertPos/4 и добавить голову на него.

Мой запрос:

?- insertPos(D, 1, [A,B,C], L).

2 ответа

Решение

Вы не можете использовать is/2 для объединения переменных R с list[H|R1], is/2 используется для оценки арифметических выражений.

Вместо этого вы можете использовать оператор объединения =/2 написав:

R = [H|R1]

или путем сопоставления с образцом по аргументам:

insertPos(V, N, [H|T], [H|R1]) :-
   N > 0, 
   N1 is N-1,
   insertPos(V, N1, T, R1).

Вы используете A B C, которые рассматриваются как переменные в прологе.

Другие вопросы по тегам