问题标签 [instantiation-error]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
math - 为什么这个哥德巴赫猜想程序在 Prolog 中不起作用?
为什么这个程序在 Prolog 中不起作用?
首先,我必须删除代码行:- ensure_loaded(p31)。否则标记一个错误说不存在。
其次,当我使用 ?-goldbach(4,X,Y) 在 SWI-Prolog 屏幕上运行它时。标记了一个错误,上面写着:
错误:参数没有充分实例化
为什么?
有人可以帮我修复程序吗?
谢谢你。
recursion - 在 Prolog 递归中正确使用 is/2 谓词
我是具有命令式编程背景的 Prolog 初学者。在解决这个网站的作业时,我遇到了两个练习:第一个是关于查找列表的第 k 个元素,第二个是关于查找列表的长度。这些是经典的列表处理问题,解决方案非常简单,对于像我这样的初学者也是如此。我无法理解的是(显然)内置is/2
谓词的不同用法。就我而言,这个谓词迫使 Prolog 进行算术计算,并可能将结果分配给左侧项。我被告知要注意的是,尽管可以在右侧使用变量,但必须在评估时使用无变量项来实例化这些变量。
对于第一个练习,建议的解决方案如下:
并且使用的方式is
对我来说很有意义:因为K
作为参数提供,K1
可以立即评估并作为递归调用中的新参数提供。
通过编写第二个练习的解决方案,即查找列表长度,我得出以下结论:
并由 Prolog 通知“参数没有充分实例化”。
正确的解决方案原来是这个:
在这种情况下,递归调用是在通过评估 K之前is
进行的。在之前的练习中,它是在评估之后进行K is K-1
的。
我想我误解了一些关键概念。什么情况下is/2
必须在递归调用之前使用,另一方面,什么时候必须在递归调用之后使用?为什么会这样?
感谢任何帮助和解释(我使用的是 SWI-Prolog 7.6.4)。
list - 插入开放式列表而不绑定其尾部变量
是否可以解决以下问题Prolog
?
让A
andB
成为数字列表,让N
成为一个数字。已知B
是递减排序的。检查是否N
可以插入A
,以便结果为B
,但不要绑定任何作为尾部出现的变量A
nor B
。
例如
谁能帮我?:)
编辑1:这就是我想出的。
然而,即使当参数完全实例化时它按预期工作,它也会绑定位于尾部的变量:
编辑 2:这是我尝试过的另一种方法。
问题仍然存在:
prolog - 参数没有充分实例化序言
尝试编写一个程序来解决这个问题:
“给你两个水壶,一个 5 加仑的,一个 3 加仑的。它们上面都没有任何测量标记。有一个水龙头可以用来给水壶装水。目标是准确地获得4加仑水。” 这是我目前拥有的代码:
当我执行此代码时,我收到以下错误:
不太确定问题是什么,我一直在尝试解决这个问题几个小时,但无法弄清楚出了什么问题。甚至无法正确测试我创建的 changeState 谓词是否因此而工作,因此非常令人沮丧。将不胜感激任何帮助!
编辑我已将其缩小到导致错误的这一行:
虽然无法真正看到这将如何导致该错误。
prolog - 多变量递归
我是 Prolog 新手,很抱歉这个琐碎的问题。
让我们考虑以下代码:
运行时at(1, 1, 1)
,我收到以下错误:
错误:参数没有充分实例化
错误:在:
错误:[10] _2090=:=1
错误:[9] at(_2116,2,0) at /tmp/d.pl:1
错误:[8] at( 1,2,1) 在 /tmp/d.pl:2
错误:[7]
我理解这个错误,但我找不到解决方案。
我也使用过at(1, 1, 0).
,但在这种情况下它堆栈溢出。
显然,这段代码是我项目的简化版本。出于这个原因,我不能简单地重新考虑at
谓词如下:
如果可行,如何在at
不完全重新考虑实现的情况下修复谓词?
谢谢你的帮助。
根据@lurker 的要求,我正在添加有关我所面临的原始问题的更多详细信息。基本上,我正在尝试使用 Prolog 来解决Wumpus world的推理系统。我对可以在 Prolog 中使用哪些功能提出了限制:没有 assert*
和相关说明。
基本思想是定义一个变量 S,它是系统的状态,它是大多数功能的输入。然后我尝试实现定义代理在系统某个状态下所处位置的功能。
这是我的at
函数的最后一个(错误)版本:
上面的代码片段引用了两个附加函数:
forwarded/3
:如果代理在某个状态下决定朝当前方向移动,则为真direction/4
:如果代理处于某个状态(和位置......好吧,我可能可以从这个函数中删除这些变量。不确定......)有一个特定的方向,这是真的
所以基本思想,比如,如果agent在(1, 1),方向0,状态0(方向可以分别是0,1,2,3,右,上,左,下),那么在状态 1 处,它位于 (2, 1)。
由于代理如果持有金牌并且处于起点则获胜,因此我的目标函数是:
如果我调用解释器并写入win(S)
(我想知道代理在哪个状态下获胜),它将进入无限递归。如上所述,我理解原因,但我看不到在 Prolog 中建模问题的方法。我不知道如何定义整个推理结构,因为它看起来很简单。
谢谢。
prolog - Prolog 自然语言解析器,参数没有充分实例化
我正在尝试制作一个 prolog 语言解析器。当我去加载我的脚本时,我得到了错误
我的代码如下
我已经阅读了其他一些关于此的帖子,但我仍然不确定我哪里出错了。
检查np
pp
并vp
工作我正在使用电话;np([the,cat,sat,on,the,mat],O,L).
,pp([on,the,mat],P,L).
和vp([the,cat,sat,on,the,mat],O,L).
. 一次调用ERROR: Undefined procedure: vp/3 (DWIM could not correct goal)
出现错误,所有 3 次调用都是相同的错误,唯一的区别vp/3
是np/3
或者pp/3
期望的目标是使用调用sentence(some_sentence)
并让程序输出 和 的np
pp
结果vp
。
list - 计算列表中忽略相邻重复项的元素数
我的直觉是,第一个“if”只是移动到“下一个头”,如果相邻元素相同,N 不会递减,但是如果它们不同,第二个会递减。然后,当列表清空时,它是真的。
也许我稍微误解了 Prolog 中的回溯,但这不应该产生正确的答案吗?
例如,我收到此错误:
prolog - 解决此 Prolog Caliban 问题时的实例化问题
我正在尝试使用 Prolog解决以下Caliban问题:
布朗、克拉克、琼斯和史密斯是 4 位重要的公民,他们以建筑师、银行家、医生和律师的身份为社区服务,尽管不一定分别。布朗比琼斯更保守,但比史密斯更自由,他的高尔夫球手比比他年轻的男人更好,收入也比比克拉克大的男人高。比建筑师挣得多的银行家既不是最年轻的,也不是最年长的。打高尔夫球比律师差的医生,也没有建筑师那么保守。不出所料,最年长的人最保守,收入最高,最年轻的人是最好的高尔夫球手。每个人的职业是什么?
我在网上找到了这段代码,并试图自己运行它:
但是>/2: Arguments are not sufficiently instantiated
在使用 ?-solutions(L) 运行时继续获取。
有人有这个问题的解决方案吗?
prolog - 参数没有充分实例化无法加载程序
当尝试加载我的文件 Tutorial_2 时,它使用 DCG 来计算句子中有多少个零或以 2 结尾的 1 和 0。
当我尝试加载进程时,我得到一个参数没有为序言 SWI 初始化文件充分实例化:
该文件在那里,自从我 3 个月前安装 prolog 以来就没有被编辑过。
prolog - (>)/2 的参数 2 中的实例化错误
所以我试图定义自然数到目前为止我这样做了:
当我这样做时,它给了我“(>)/2 的参数 2 中的实例化错误”,因此他无法在第 2 行中实例化 X,但如果取出失败,他会执行比较 (>) 并且实例化没有问题X,那他为什么抱怨我失败了?