首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么更改声明顺序会改变统一行为?

为什么更改声明顺序会改变统一行为?
EN

Stack Overflow用户
提问于 2022-07-12 20:08:27
回答 1查看 50关注 0票数 0

如果我们宣布这样的事实:

代码语言:javascript
复制
dnp_padrão(1, plural, mos).
dnp_padrão(2, plural, 'is').
dnp_padrão(3, plural, m).

dnp_padrão(1, singular, '').
dnp_padrão(2, singular, s).
dnp_padrão(3, singular, '').

问prolog:

代码语言:javascript
复制
?- dnp_padrão(1, singular, X).
X = ''.

好的,只有一个事实与这个查询相统一,但是如果我问:

代码语言:javascript
复制
?- dnp_padrão(1, plural, X).
X = mos ;
false.

为什么SWI统一试图寻找另一个事实,如果只有一个事实是统一的?为什么在前一个问题中没有呢?在这种情况下,统一是如何运作的呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-13 12:19:49

从这个文档

索引

  • 索引是一种用于为特定目标快速选择谓词的候选子句的技术。在大多数Prolog系统中,索引(仅)是在头的第一个参数上完成的。如果实例化此参数为带函子的原子、整数、浮点或复合项,则使用散列快速选择第一个参数可能与目标的第一个参数相统一的所有子句。

这意味着您的两个查询- dnp_padrão(1, ...) -过滤到以下两个事实:

代码语言:javascript
复制
dnp_padrão(1, plural, mos).
dnp_padrão(1, singular, '').

查询?- dnp_padrão(1, singular, X).发现第一个不匹配,因为plural参数,显示第二个,并知道没有更多-没有选择点。

查询?- dnp_padrão(1, plural, X).找到第一个查询,将其显示给您,并留下一个选择点,因为它还没有查看更多的事实。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72957862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档