使用R-2-L字时Prolog中出现未定义的过程错误

使用R-2-L字时Prolog中出现未定义的过程错误,prolog,nlp,Prolog,Nlp,我想用Prolog做一个阿拉伯语词法分析器 我已经实现了以下代码。 这被称为使用: parse(A,S,D)。 期望值: A = male S = لعب D = single 代码说明: 它应该解析单词يلعب,注意在阿拉伯语中ي(右边的第一个字母)表示它是阳性词。لعب是动词 错误: 运行代码时,出现以下错误: 错误:parse/4:未定义的过程:dict/2 请注意,当使用英文字母模仿阿拉伯语单词时,代码的行为与预期一致,不会产生此错误 我如何解决这样的错误,或者让序言理解R-to-L

我想用Prolog做一个阿拉伯语词法分析器

我已经实现了以下代码。
这被称为使用:
parse(A,S,D)。

期望值:

A = male
S = لعب
D = single
代码说明: 它应该解析单词يلعب,注意在阿拉伯语中ي(右边的第一个字母)表示它是阳性词。لعب是动词

错误: 运行代码时,出现以下错误: 错误:parse/4:未定义的过程:dict/2

请注意,当使用英文字母模仿阿拉伯语单词时,代码的行为与预期一致,不会产生此错误

我如何解决这样的错误,或者让序言理解R-to-L单词

编辑: 在附图中,请注意,在红色框中,它成功地将ي与男性匹配。在蓝色框中,当它失败时,它应该已回溯并开始连接以尝试匹配新词,但它会生成所示的错误


Mac上使用SWI Prolog时必须小心。复制粘贴有一个小问题。如果使用[user],然后超过多行,则不会读取所有行:

这种情况经常发生,与阿拉伯语脚本或unicode等无关。我已经向SWI Prolog提交了一份错误报告。当您使用[user]并逐个执行这些行时,您会得到正确的结果

在上面的屏幕截图中,您可以看到我进行了一个接一个的粘贴,因为有多个提示“|::”。其他Prolog系统没有必要解决此问题,例如我在Jekejeke Prolog中得到:


SWI Prolog的最佳解决方案可能是将事实存储在一个文件中,并从那里查阅它们。在Jekejeke序言中,我必须调查,为什么逗号后面的空格显示在错误的一侧。

您使用哪一个序言?也许它在源代码中不支持UTF-8?请尝试引用阿拉伯语文字。如何检查它是否支持UTF-8?我使用的是SWI Prolog版本7.2.3我尝试在“”中添加阿拉伯语单词,但没有出现错误,但Prolog无法匹配。使用上述代码,它在dict()处无法匹配,check()匹配成功。SWI-Prolog确实支持UTF-8。尝试使用DCG,它使解析更容易
end/3
的定义在我看来很奇怪。如果第一个参数是整数,第二个参数是整数,这是因为R2L格式在这之前失败了。0与2具有相同的索引。我认为最好的解决方法是首先输入换行符,直到出现提示
|::
。那么,您是否尝试了我的建议?我相信是指“我没有尝试过”吗?几分钟前评论中的新截图,请参见此处。特别注意最后一个屏幕截图中的列表(检查/3)。
A = male
S = لعب
D = single