2016-02-28 6 views
4

Я - новый пользователь для пролога. По моим сведениям, Pure Prolog ограничивается предложениями Хорна. Вот очень простая программа пролога -Order of Goals in Pure Prolog

% student(Snr , FirstName , LastName , Semester). 
    student( 1000 , 'Anna' , 'Arm'  , 'ti2' ) . 
    student( 1001 , 'Rita' , 'Reich' , 'ti2' ) . 
    student( 1002 , 'Peter' , 'Reich' , 'ti2' ) . 
    student( 1003 , 'Peter' , 'Petersen' , 'ti7' ) . 


% course(Semester , Course ) . 
    course('ti2' , 'Mathe2' ) . 
    course('ti2' , 'Physics2') . 
    course('ti7' , 'pdv2' ) . 

musttake(M,V,N,S,C) :- student(M,V,N,S), course(S,C). 

musttakereverse(M,V,N,S,C) :- course(S,C), student(M,V,N,S). 

Мой университет слайд говорит, что даже если мы поменяем порядок целей в правиле, в чистом Прологе, порядок результатов не должен быть изменен. В приведенном выше коде есть 2 правила, которые я выполнил. musttake и musttakereverse, в которых я просто изменил порядок целей. Таким образом, согласно слайдам, порядок результатов не должен изменяться при запуске. Но, когда я запускаю код, они дают результаты в разных порядках. (По моему мнению, вышеуказанная программа находится в pure prolog).

Итак, я хотел бы знать, если это правда, что

Изменение заказов в цели не меняет порядок результата в чистом коде Пролога.

Спасибо!

+0

Вы уверены, что они не сказали, что «изменение порядка целей не повлияет на набор результатов», а не «порядок результатов»? – Enigmativity

+0

Точная фраза - «Крайний пример: обмен целями может привести к бесконечным циклическим вызовам в некоторых рекурсивных правилах. Однако порядок результатов не отличается». –

ответ

3

Вы правы.

Если вы используете запрос

?-musttake(M,V,N,S,C). 

Цель student(M,V,N,S) будет удовлетворена через первый факт, затемcourse(S,C) будет удовлетворен через 5 факт. Если проследить эволюцию М, будет иметь значение 1000.

Следующий возможный ответ придет от исследования последнийвозвращаться обратно точку, которая в course(S,C), неstudent(M,V,N,S). Значение C изменяется по 6-му факту, но значение M не является, поэтому M по-прежнему 1000 во втором решении.

Если вы используете другой запрос однако:

?-musttakereverse(M,V,N,S,C) 

цель course(S,C) удовлетворяется через 5 факта, то цель student(M,V,N,S) удовлетворяется через первый факт, который, опять же, дает м значение 1000, но следующее решение исследует последнюю точку возврата, на этот раз student(M,V,N,S), используется второй факт, а значение M равно 1001.

Пролог использует первый поиск глубины и заказывает предложения и цели из нисходящего и слева направо, я могу только предположить, что ваши слайды содержат опечатку. Вы можете узнать больше о задании и задании целей here.

4

Вот минимальный пример, чтобы проиллюстрировать, что «порядок результата», то есть порядок ответа замен генерироваться зависит от порядка целей в статье:

p(X) :- p123(X), p321(X), p213(X). 

p123(1). p123(2). p123(3). 

p321(3). p321(2). p321(1). 

p213(2). p213(1). p213(3). 

Обратите внимание, что все четыре предикаты описывают точно такой же набор решений. Точный порядок для p/1 определяется в этом случае самой первой целью.

На какой порядок целей не влияет набор решений. Это самое интересное свойство.

Самое интересное свойство, которое не может быть сохранено, - это прекращение. Обмен объектами может повлиять на свойства завершения.

И еще есть еще одно сохранившееся свойство, которое, я признаю, не очень интересно: также сохраняется избыточное количество ответов/решений.

 Смежные вопросы

  • Нет связанных вопросов^_^