Пролог Аргументы не достаточно созданы, 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, которые рассматриваются как переменные в прологе.