Я пытаюсь добавить некоторые числа в список, эти числа находятся в диапазоне от X
до Y
, где X - нижняя граница, а Y
- верхняя граница, а затем сохраните эти сгенерированные числа в списке. Я попытался это:Как добавить числа в определенном диапазоне к списку в прологе
domains
list=integer*.
predicates
nondeterm generate(integer,integer,list).
nondeterm append(integer,list,list).
clauses
append(X,[],[X]).
generate(0,0,[]).
generate(X,X,[]) :-
write("The Upper And Lower Numbers Are The Same\n").
generate(X,Y,[X|T]) :-
X<=Y,
N=X+1,
A=N+1,
append(N,T,Z),
generate(A,Y,Z).
goal
generate(1,4,Result).
Но когда я проверяю цели он не дает мне «Нет решения». Что я делаю неправильно? Большое спасибо за вашу помощь.
Вы должны пометить вопрос с [зрительно-пролог] Я думаю, , –
Проведите трассировку и посмотрите, что происходит при каждом рекурсивном вызове 'generate (A, Y, Z)'. Вероятно, вы увидите проблему с рекурсивным случаем. Логика, на первый взгляд, кажется, не имеет никакого смысла, когда «X» увеличивается («N = X + 1'), тогда этот результат также увеличивается (« A = N + 1'). Затем вы вызываете 'append (N, T, Z)' в домашнем append (будьте осторожны: стандартный пролог уже имеет 'append', хотя я не знаю, работает ли Visual Prolog, и это не то же самое, что и ваш) , но 'T' не создается. Я подозреваю, что это совсем не то, что вы намеревались. – lurker
@ lurker Благодарим вас за разъяснение, я попытался вызвать встроенный метод добавления, но он не сработал, так что это домашний метод true или что ?, и я увеличиваю число (N = X + 1), чтобы добавить следующее число в диапазон в список и приращение этого числа (A = N + 1), чтобы снова вызвать функцию с ним. Извините, но что вы подразумеваете под «T не создается»? –