Программа PROLOG семантическая и упражнения - PullRequest
0 голосов
/ 12 февраля 2019

Прежде всего у меня есть сомнения по поводу семантики программы, например:

length([],0).
length([_|L],N):-
    length(L,N0),
    N is N0 + 1.

Первая инструкция означает базовый вариант или имеет другие значения?

Мне нужно написать программу для пролога, которая при заданном числе возвращает список чисел от 0 до заданного числа.Например, когда ввод равен 5, вывод равен [0,1,2,3,4,5].

Я ищу решение этой проблемы, но не знаю, как начать.

1 Ответ

0 голосов
/ 13 февраля 2019

В библиотеке SWI-Prologs есть предикат, который делает почти то, что вам нужно.Это называется numlist/3.Вы можете использовать его с нижней и верхней границей:

?- numlist(1, 5, L).
L = [1, 2, 3, 4, 5].

И здесь реализация :

numlist(L, U, Ns) :-
    must_be(integer, L),
    must_be(integer, U),
    L =< U,
    numlist_(L, U, Ns).

numlist_(U, U, List) :-
    !,
    List = [U].
numlist_(L, U, [L|Ns]) :-
    L2 is L+1,
    numlist_(L2, U, Ns).

Вы можете избавиться от верхней половины этого полностьюи потерять один аргумент (ваш Lower - всего 1).

Если вы немного поиграете с этим, вы сможете понять это.

...