Я создал функцию, которая вычисляет длину списка. Ниже мой код.Аргументы Prolog недостаточно инстанцируются (функция, которая вычисляет длину списка)
listLength(LIST) :- solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
При запуске этот код с входом
- listLength ([1, 2, 3, 4, 5, 6, 7]).
тогда, переводчик показал мне сообщение об ошибке solve/2 : Arguments are not sufficiently instantiated.
, когда я изменил выше кода, как показано ниже.
listLength(LIST) :- LENGTH is 0, solve(LIST, LENGTH), write(LENGTH).
solve([], _).
solve([_|T], LENGTH) :- ADD is LENGTH + 1, solve(T, ADD).
Когда я запускаю этот код с тем же входом, то всегда написано.
Я хочу рассчитать LENGTH, и я хочу использовать переменную в функции listLength.
Что случилось со мной? (Пожалуйста, обратите внимание, что я использую swi-пролог.)
Это очень медленно для запросов, таких как 'listLength (L, 10000)' – false
Как вы могли бы запросить, что, поскольку он принимает только один список параметров ?? – coder
Вы правы! Я видел только дополнение в конце. Должен прочитать 'solve (L, 100000', я признаю, что этого не произойдет. – false