gpt4 book ai didi

prolog - 纯 Prolog 中的目标顺序

转载 作者:行者123 更新时间:2023-12-04 23:41:42 31 4
gpt4 key购买 nike

我对序言很陌生。据我所知,Pure Prolog 仅限于 Horn 子句。
这是一个非常简单的序言程序 -

 % 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).

我的大学幻灯片说,即使我们在 Pure Prolog 的规则中颠倒目标的顺序,结果的顺序也不应该改变。在上面的代码中,我已经实现了 2 个规则。 musttakemusttakereverse其中我只是改变了目标的顺序。因此,根据幻灯片,运行时不应更改结果的顺序。
但是,当我运行代码时,它们以不同的顺序给出结果。(根据我的理解,上面的程序在 pure prolog 中)。

所以,我想知道这是不是真的

Change of orders in Goal does not change the order of the result in Pure Prolog code.



谢谢!

最佳答案

这是一个最小的例子来说明“结果的顺序”,即生成的答案替换的顺序受子句中目标顺序的影响:

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的精确订单在这种情况下,由第一个目标决定。

目标顺序不影响的是解决方案集。这是最有趣的属性。

可能无法保留的最有趣的属性是终止。通过交换目标,终止属性可能会受到影响。

然后,还有另一个保留的属性,我承认,它不是很有趣:冗余答案/解决方案的存在也被保留了。

关于prolog - 纯 Prolog 中的目标顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679996/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com