Cut (逻辑编程)

✍ dations ◷ 2025-08-22 19:35:01 #Cut (逻辑编程)

Prolog编程中的cut操作,用!表示,该操作总能够成功,但是不能够回溯位于该操作左边的子句。Cut操作被广泛的用于减掉不希望回溯的分支,例如,避免找到程序不需要的额外的答案和避免额外的计算。

应当保守的应用cut操作,当程序不正确会有一种诱惑来插入cut来检验cut能否让程序正确。如果一个测试是不必须的因为有cut来保证这是真的,那么最好在合适的地方加上注释说明这一点。

Cut被某些人认为是有争议的逻辑程序控制方式,因为该操作是因为效率问题被加入的而且不是一个Horn clause.

如果一个cut操作只是为了提高性能,那么它就被称为green cut,例如:

 gamble(X) :- gotmoney(X),!. gamble(X) :- gotcredit(X), + gotmoney(X).

上述操作被称为green cut操作符。!只是简单的告诉Prolog解释器停止寻找其他的答案。但是你会注意到如果gotmoney(X)子句失败的话,那么解释器将会检查第二条规则。第二个规则中的gotmoney(X)似乎显得多余,因为只有当第一个规则失败的时候,第二个规则才会被查看,但是,显式地写上 + gotmoney(X),你就能确保第二个规则总是能正确地工作,即使在第一条规则被恰巧移除或改变的情况下也是正确的。

Green cut的目的是让程序变的效率更高,而不会改变程序的输出。

如果一个cut操作不是green的,那么它就是red cut,例如:

 gamble(X) :- gotmoney(X), !. gamble(X) :- gotcredit(X).

那么程序的运行结果将依赖于cut操作符的位置和关联子句的顺序,这些将决定这个程序的含义。如果任何情况下地一个关联子句被移除了(例如,剪切粘贴的时候的错误),第二个子句将不会表达和上述green cut例子中一样的意思,因为该子句将不能保证 + gotmoney(X)。


相关

  • 微管蛋白微管蛋白(英语:Tubulin)是一类含有多个成员的蛋白质家族。其最常见的成员是α-微管蛋白和β-微管蛋白,它们是组成微管的主要成分。微管由α-微管蛋白和β-微管蛋白所形成的二聚
  • 穆穆穆穆(1954年8月-),中国大气动力学家。出生于安徽定远。籍贯安徽定远。中国科学院大气物理研究所研究员。1978年毕业于安徽大学数学系,1982年获该校应用数学硕士学位,1985年在复旦
  • I seek/DaylightI seek ASIL(作词) AKJ&ASIL(作曲)“I seek / Daylight”是岚的第49张单曲。于2016年5月18日发行。唱片公司为J Storm。此单曲和前作“复活LOVE”发行相隔约3个月。同时也是“Ca
  • 裘日菊裘日菊,江西新建人,清朝政治人物。举人出身。乾隆元年(1736年),担任广东广州府永安县知县(现紫金县知县)。后由林琪接任。
  • 古典行星古典行星,有时也被称为目视行星、经典行星。古典行星为人类肉眼可见的,在一些古文明中,古典行星为太阳、月球、木星、土星、水星、火星、金星。行星名单的去留,取决于行星定义观
  • 家事事件家事事件包括家事诉讼事件、家事非讼事件以及家事调解事件。凡是与人际间身份法律关系(如婚姻事件及亲子事件等等)、及以身份为基础的财产关系(如夫妻间财产、亲属间请求给付扶
  • 卡萨布兰卡 (印尼)卡萨布兰卡(印尼语:Kota Kasablanka)是位于印尼雅加达Tebet的一个占地11.5公顷的综合开发项目,由办公楼、服务式办公套房、购物中心、会议厅和公寓楼组成,由PT Pakuwon Jati Tbk(P
  • 子商在抽象代数及范畴论中,子商是很常用的概念。这是子结构(例如子群、子模、子表示)与商结构(例如商群、商模、商表示)的推广。固定一个范畴
  • 三明治教学技巧三明治教学技巧(英语:Sandwich technique),是指在外语教学中,为了将所学内容更快更准确全面地传达给学生,老师在介绍某个新的外语语言点的时候,在将此语言点用外语口述两遍的中间加入一遍用学生母语给出的翻译。插入母语翻译的时候,老师可以有意地通过声调的调节或者停顿等方式来区分外语教学的部分。三明治教学法的基本操作步骤如下:比如说老师在领读一段对话的时候,老师先用外语 (L2) 领读一遍,然后插入一遍母语 (L1) 翻译,然后再用外语 (L2) 领读一遍,即:L2 => L1 =>
  • 遥控车遥控车(Remote controlled cars,或R/C cars),是遥控模型的一种,以无线电或红外线等无线操控的方式控制的玩具车或模型车。遥控车的控制信号,通过手摇杆上的发射器发出,由装在车上的接收器接收。接收器根据接收到的射频信号控制车速、改变车轮的转动方向以及马达、伺服马达或引擎的运转。简单的遥控车只是能控制停与走的玩具,而高级的遥控车可以是功能强大的赛车,具所有实际赛车的复杂和可调节的特性,速度更可超过时速一百公里。遥控车未必是休闲用品,例如司机驾驶仓不在车上的无人驾驶交通工具、战场上的杀