Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第一个谓词中的Prolog割算子_Prolog - Fatal编程技术网

第一个谓词中的Prolog割算子

第一个谓词中的Prolog割算子,prolog,Prolog,我在Prolog中有以下基础: holiday(friday,may1). weather(friday,fair). weather(saturday,fair). weather(sunday,fair). weekend(saturday). weekend(sunday). picnic(Day) :- !,weather(Day,fair), weekend(Day). picnic(Day) :- holiday(Day,may1). 当我运行野餐(When)。我得到以下跟踪:

我在Prolog中有以下基础:

holiday(friday,may1).
weather(friday,fair).
weather(saturday,fair).
weather(sunday,fair).
weekend(saturday).
weekend(sunday).

picnic(Day) :- !,weather(Day,fair), weekend(Day).
picnic(Day) :- holiday(Day,may1).
当我运行
野餐(When)。
我得到以下跟踪:

[trace]  ?- picnic(When).
   Call: (6) picnic(_G716) ? creep
   Call: (7) weather(_G716, fair) ? creep
   Exit: (7) weather(friday, fair) ? creep
   Call: (7) weekend(friday) ? creep
   Fail: (7) weekend(friday) ? creep
   Redo: (7) weather(_G716, fair) ? creep
   Exit: (7) weather(saturday, fair) ? creep
   Call: (7) weekend(saturday) ? creep
   Exit: (7) weekend(saturday) ? creep
   Exit: (6) picnic(saturday) ? creep
When = saturday ;
   Redo: (7) weather(_G716, fair) ? creep
   Exit: (7) weather(sunday, fair) ? creep
   Call: (7) weekend(sunday) ? creep
   Exit: (7) weekend(sunday) ? creep
   Exit: (6) picnic(sunday) ? creep
When = sunday.

我的疑问是:据我所知,当谓词位于左侧时,cut操作符应该停止搜索替代项信号为真。第一个位置的信号是什么意思?为什么解释器一直在搜索另一个可以使其他谓词变为真的值?

这样做的结果是,您的第二个野餐/1规则将被完全忽略。在您的程序生命周期中,它将永远不会有机会启动


但是回溯仍然在可用的备选方案中起作用(目标位于切割右侧),你可以在追踪中清楚地观察到它们。

序言艺术,第11部分,切割和否定“在操作上,切割处理如下。目标成功,并将序言提交给所有选择,因为父目标与切割发生的子句的开头统一。“因此,一旦您的最高目标与第一次野餐的开头统一/1,它就不能与第二次野餐的开头统一/1。

谢谢,现在我理解了切割的含义。