在 Prolog 中编辑 Eliza 聊天机器人

2024-04-02

我一直在努力尝试在 Prolog 中编辑 Eliza 聊天机器人。每次我尝试编辑某些内容时,都会出现新的错误。它是否受到任何形式的编辑保护?

我使用 SWI-prolog 编辑器进行编辑。问题是我试图在没有完全理解代码的情况下最小化代码。我正在尝试做一个简单的简短版本。所以,我也许会删除一些重要的东西!例如“my_char_type”。我得到的错误是“retract/1: 无权修改静态过程‘rules/1’”

有没有我可以理解的小型聊天机器人的代码?

请帮忙 :'(


Prolog 有静态存储和动态存储。如果你打开一个文件,说program.pl然后你在其中添加一些行,如下所示:

foo(tabitha).
foo(darlene).

这些事实最终会被保存在静态存储中。它们不是程序的可变部分(默认情况下)。

The asserta/1, assertz/1 and retract/1 and retractall/1过程构成了动态存储的基础。如果您只是坐在控制台前,您可以将一些事实添加到动态存储中,然后通过执行以下操作将其删除:

?- asserta(baz(tabitha)).
true.

?- baz(X).
X = tabitha.

?- retract(baz(tabitha)).
true.

?- baz(X).
false.

但是,如果您在加载后出现提示program.pl你试图收回foo(tabitha)您将收到静态过程消息:

?- retract(foo(tabitha)).
ERROR: retract/1: No permission to modify static procedure `foo/1'
ERROR: Defined at /Users/fusion/program.pl:1

原因是因为foo/1事实被放置在静态存储中而不是动态存储中,因为您没有将它们放在那里asserta/1 or assertz/1或者将谓词声明为动态,如下所示:

:- dynamic foo/1.

所以有两条路可以前进:

  1. 直接编辑程序源并重新加载。
  2. 声明rules/1谓词动态如上所述。

顺便说一句,在 SWI-Prolog 中重新加载最好通过运行make.从提示中。

我会推荐选项#1,否则当你喜欢它正在做的事情时,将很难重建你的工作程序的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Prolog 中编辑 Eliza 聊天机器人 的相关文章

  • Prolog 中不带双精度的列表的所有组合

    有没有一种简单的方法可以获取列表的所有组合而无需双精度 没有双打我的意思是也没有彼此的排列 所以不行 a b c and c a b or c b a 因此对于输入 a b c 输出将是 a b c a b a c b c a b c 我只
  • Prolog 中的分配性检查

    假设我有一个等价关系eq 以及多个二元运算符o 1 o 2 o n 我想找出哪些操作分配给其他操作 假设我有一个可以确定两个表达式是否等价的知识库 一个简单的解决方案是输入所有可能的查询 对于左分配性 eq o 1 Z o 1 X Y o
  • Prolog 中的掩码

    我最近一直在尝试理解 Prolog 并且一直在搞乱 Prolog 中的列表列表 我正在尝试创建一种我想在 p 中的面具 序言 我有一个谓词 它确定 Prolog 中两个列表列表 比如说 L1 和 L2 之间的差异 并将它们保存为列表列表 比
  • Prolog 时间重叠问题

    假设我有这个知识库 free ann slot time 8 0 time 9 0 free ann slot time 10 0 time 11 0 free bob slot time 7 0 time 8 30 free bob sl
  • 在 Prolog 中编辑 Eliza 聊天机器人

    我一直在努力尝试在 Prolog 中编辑 Eliza 聊天机器人 每次我尝试编辑某些内容时 都会出现新的错误 它是否受到任何形式的编辑保护 我使用 SWI prolog 编辑器进行编辑 问题是我试图在没有完全理解代码的情况下最小化代码 我正
  • 如何使用 Prolog 查找二叉树的深度

    我正在学习 Prolog 并试图找到一个深度二叉树使用 Prolog 我代表一棵树是这样的 nil is a tree tree 1 nil nil this is a leaf tree 1 tree 1 nil nil nil this
  • current_prolog_flag double_quotes DCG(代码或字符)?

    在使用 SWI Prolog DCG 时 我注意到有些人注意到 set prolog flag double quotes codes Jan http www swi prolog org pldoc man section string
  • Prolog 变量查询中的“\+”问题

    我正在读 七周七种语言 atm 我对一些 Prolog 查询感到困惑 我不明白对 否 的回答 The friends pl文件看起来像这样 likes wallace cheese likes grommit cheese likes we
  • 依赖规则顺序

    为了计算两个相同长度列表之间的汉明距离 我使用foldl hamm A B 0 R 有了这个定义hamm 4 hamm A A V V hamm A B V0 V1 A B V1 is V0 1 第一条规则的删减可以防止不必要的回溯 然而
  • 如何在 GNU Prolog 中使用“long int”?

    所以基本上看来 GNU Prolog 在我的 32 位 x86 Linux 上使用 28 位整数 下面的代码无法编译 foo A A0 is 0xdeadbeef A1 is A0 gt gt 8 A2 is A0 gt gt 16 A3
  • Prolog 管线任务

    我有一项任务是在序言中制作一张简化的地铁地图 其中一部分要求制定一项规则来检查两个车站是否在同一条线上 我有一条规则 但它似乎不起作用 这就是我到目前为止所拥有的 adjacent nh lg central 4 adjacent lg o
  • Prolog 中的匹配元组

    为什么Prolog匹配 X Xs 包含更多元素的元组 一个例子 test2 X Xs write X nl test2 Xs test2 X write X nl test
  • 在 Prolog 中动态拆分列表

    我从序言开始几周 但我看到了更深入的操作列表的递归谓词的构造 我的问题是 是否可以构建一个谓词 将给定列表拆分为给定数量的其他列表 比如我想象的 split H T NumberLists Lists 递归实现 split 1 2 3 4
  • 在 prolog 中读取用户输入的字符串

    我是 Prolog 初学者 我正在使用 swi prolog 刚刚开始使用它 我需要将用户输入字符串拆分到列表中 我尝试了以下代码 但出现错误 指出 在子句正文中完全停止 无法重新定义 2 write Enter the String nl
  • 计算序言中列表的排列

    在 序言艺术 第二版中有一个问题 您应该定义一个谓词 Even permutation Xs Ys 和类似的奇数排列 当您查询时 例如 Even permutation 1 2 3 2 3 1 和 odd permutation 1 2 3
  • Same_length/2 更好的纯版本

    鉴于频繁的纯定义same length 2 as same length same length As Bs same length As Bs same length L L loops 是否有一个纯粹的定义不会在这种情况下循环 类似于纯
  • Prolog中如何选择bagof、setof和findall

    如何在 bagof setof 和 findall 之间做出选择 有什么重要的区别吗 哪个最常用 哪个最安全 感谢您的评论 回答 我检查了SWI Prolog 手册页findall 3 http www swi prolog org pld
  • 查找相邻成员

    我必须找出列表中的两个成员是否相邻 限制是使用append 3谓词 到目前为止 我已经完成了下面的操作 如果它是真的 它就有效 否则我得不到答案 就像它永远运行一样 adjacent X Y L append L1 X Y T1 appen
  • Prolog中计算数字是否为素数

    我正在尝试计算输入是否是素数 但出了问题 这是我的代码 primeNumber X prime prime A 1 prime prime A B R is A mod B R 1 R A prime prime X B B lt A Ne
  • 将 SWI Prolog 代码编译为 Windows 可执行文件 - 解析器 Grails3 项目

    我正在尝试构建解析器 Grails3 项目https github com RichardMoot Grail https github com RichardMoot Grail谁的教程是http www labri fr perso m

随机推荐

  • 使用 WebtestClient 测试 MultipartFile

    我正在为我的控制器类编写单元测试 我正在使用 spring webflux 因此我正在编写测试WebTestClient 这是我的控制器方法 PutMapping updatedocument documentType public Res
  • iPhone SQLite DB 和基于 Web 的 DB 同步和交互建议

    我正在开发我的第二个 iPhone 应用程序 并且正在寻找有关数据库处理的架构建议 这个想法是 1 信息数据库存储在服务器 LAMP 堆栈 上 信息通过 JSON 传递到设备 该部分已实施 用户可以 收藏 数据库中的某个项目 该项目将其存储
  • 使用Intent打开系统应用程序

    我正在尝试制作一个简单的应用程序 当用户从主屏幕或应用程序抽屉单击时 该应用程序会将用户发送到特定的 系统安装的 应用程序 系统设置 日历 浏览器等 例如 我目前尝试在启动应用程序时打开系统设置 就像设置快捷方式一样 可以按照我想要的方式实
  • RStudio 中的永久代码折叠

    我试图确保在保存文件时 在 RStudio 中崩溃的代码 通过 Alt L 在 Shiny 中保持在原位 目前 每次我保存文件时 折叠都会消失 有谁知道如何使折叠永久且独立于保存文件 供参考 我在 Windows 上使用 RStudio 0
  • 使用cmd获取当前用户路径变量而不使用系统路径

    当我使用标准用户 也是管理员 登录时 命令echo PATH 返回系统路径 用户路径 如何只获取用户的路径 例如 当我当前用户的路径是C ruby C java bin系统路径是 SystemRoot system32 SystemRoot
  • 如何使文本浮动在列表项空间的底部?

    如何使文本浮动在列表项空间的底部 我试图使 li 中的所有文本都位于 li 高度的底部 有没有更好的方法来实现这种外观 以及如何超链接 h1 标题 margin 0 padding 0 nav width 100 height 110px
  • 如何在 Internet Explorer 中使用 html 子元素获取 contenteditable div 中的插入符位置

    我正在使用一个 contenteditable div 它可以选择包含内联 html 元素 例如标签 在文本流中 在某些时候 我需要抓取 contenteditable div 的插入符位置 光标位置 插入符 光标 位于 html 子元素之
  • Angular - 错误:spawn cmd ENOENT

    您好 当我生成角度时遇到问题 哟角度 我都完成了 运行 Bower install 和 npm install 来安装所需的依赖项 如果失败 请尝试自己运行该命令 调用角度 路线 调用 Angular Controller C Users
  • 在每个时间间隔更改文本 - React

    我试图在反应的每个时间间隔更改文本 屏幕出现时自动开始 但问题是 给定的时间不被尊重 并且文本以随机时间间隔更改 这是我的代码的一部分 const names tony elias fadi const newName setnewName
  • 在 php 中将 emoji 字符转换为 Unicode 代码点数字

    我正在尝试使用 php 将表情符号转换为 unicode 更多信息 https unicode org emoji charts full emoji list html https unicode org emoji charts ful
  • symfony 2 twig 访问数组 javascript 索引

    是否可以从中获取对象twig数组知道索引是ajavascript多变的 我的控制器 public function showContactModalAction iduser profil em this gt getDoctrine gt
  • 如何在 Electron BrowserWindow 中查看 PDF?

    所以我有这个 Electron 应用程序 在一个 html 文件中 我链接了另一个脚本 该脚本为程序提供了一些实用功能 其中之一是 function openPDF filePath let pdfWindow new electron r
  • Logstash 的 Java 过滤器

    你知道 Logstash 有一个 Ruby 过滤器 它使我能够用 Ruby 编写代码 它通常包含在配置文件中 如下所示 filter ruby code gt 现在我有两个 Jar 文件 我想将它们包含在过滤器中 以便可以根据我在这些 Ja
  • c++0x 中用户定义文字的重载规则

    我对超载规则有点困惑 假设有以下文字运算符 unsigned long long operator xx unsigned long long cooked literal int 1 unsigned long long operator
  • stringbuilder 调用中的 Java 字符串连接

    据我所知 StringBuilder 在连接期间不在字符串池中创建临时字符串实例 从而有助于减少内存使用量 但是 如果我这样做会发生什么 StringBuilder sb new StringBuilder bu sb append b u
  • Meteor - 设置文档标题

    有没有办法改变
  • 如何自动测试基于浏览器的应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如果它是一个Windows程序 我会使用Auto it http www autoitscript com autoit3 index s
  • R data.table 在导出函数中中断

    我在让 data table 在 roxygen2 导出函数中工作时遇到问题 这是一个名为 foo R 位于我的包的 R 目录中 的文件中的一个简单的假函数 它使用 data table Data table test function e
  • jQuery 验证(至少一个字段有文本)

    我的这个页面有几个 TextAreas asp net mvc 我需要验证这些字段中至少有一个包含文本 我怎样才能用 jQuery 做到这一点 这是我拥有的 textAreas 的一个示例 假设您没有使用验证插件并且所有文本区域都有 Esp
  • 在 Prolog 中编辑 Eliza 聊天机器人

    我一直在努力尝试在 Prolog 中编辑 Eliza 聊天机器人 每次我尝试编辑某些内容时 都会出现新的错误 它是否受到任何形式的编辑保护 我使用 SWI prolog 编辑器进行编辑 问题是我试图在没有完全理解代码的情况下最小化代码 我正