Пролог Семантика и преемственность - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть два вопроса, над которыми я работаю, и мне просто трудно понять этот вопрос. Первое из них:

Создайте предикат Prolog flatten_append / 3, который имеет 3 аргумента, которые являются всеми списками. Третий список должен быть эквивалентен объединению сведенных версий первого списка с последующей сведенной версией второго списка. Например, flatten append ([1,2, [3,4,5], [6]], [[7], [8, [9]]], X) должен успешно связать X со списком [1, 2,3,4,5,6,7,8,9]. Используйте встроенные предикаты append / 3 и flatten / 2.

Означает ли создание предиката создание нового файла, к которому я затем обращаюсь, чтобы запустить? Также для трех аргументов это так: thing([], [X], X) или это будет только один, и мне нужно что-то вроде этого для трех аргументов?

thing([],[X],X).

thing([H|T],[H|X],Y) :- H = 1, anything(Y,Z), thing(T,X,Z).

thing([H|T],[H|X],Y) :- H = 0, nothing(Y,Z), thing(T,X,Z).

Наконец, что это значит, когда говорится, что успешно связывается X? Есть ли определенный c ордер или в конце вы назначаете X равным тому, что вы только что сделали? Спасибо

1 Ответ

0 голосов
/ 27 апреля 2020

Означает ли создание предиката, что я создаю новый файл, который затем проверяю для запуска?

Это фактически означает «добавить предикат в базу данных Prolog», чтобы его можно было запустить из REPL (Read-Eval-Print L oop, традиционно называемый «уровень пролога»). Но да, это делается путем создания файла my_predicate.pl и последующего ввода consult(my_predicate). или [my_predicate]. (также make. для его перезагрузки после изменения) в REPL. Обратите внимание на «точку» в конце, чтобы завершить команду.

для трех аргументов таков, как эта вещь ([], [X], X)

Да точно. Это предикат thing/3, который как-то связывает три аргумента. Как это происходит, каково предпочтительное направление потока информации (например, в thing(X,Y,Z), вы можете вычислить Z из X и Y, или проверить Z, учитывая X и Y, или даже вычислить X и Y с учетом `Z) зависят от реализации.

Реализация thing/3, которую вы даете, состоит из 3 пунктов. 1 - это «факт» (имеет только голову), 2 - это «правила» (имеют голову и тело).

что означает, когда говорится, что преуспевает связывание X?

Это означает, что вычисление успешно вычисляет значение, делает X равным ему и успешно возвращается. Как и в flatten append([1,2,[3,4,5],[6]],[[7],8,[9]]],X), "успешно" и при возврате X "является" (содержит / связан) с плоским списком. X ведет себя как ссылка на глобальную переменную.

Найдите время, чтобы прочитать вступление: http://www.learnprolognow.org/ и попрактикуйтесь в https://swish.swi-prolog.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...