使用 Clips 专家系统中的 Python 函数

2023-12-29

使用 PyClips,我尝试在 Clips 中构建规则,从 Python 解释器动态检索数据。为此,我注册了一个外部函数,如下所示手册 http://pyclips.sourceforge.net/manual/pyclips-overview.html#SECTION003250000000000000000.

下面的代码是该问题的一个玩具示例。我这样做是因为我有一个应用程序,其中包含大量数据(采用 SQL 数据库的形式),我想使用 Clips 对其进行推理。但是,如果我可以简单地将 Clips 直接“插入”Python 的命名空间,那么我不想浪费时间将所有这些数据转换为 Clips 断言。

但是,当我尝试创建规则时,出现错误。我究竟做错了什么?

import clips

#user = True

#def py_getvar(k):
#    return globals().get(k)
def py_getvar(k):
    return True if globals.get(k) else clips.Symbol('FALSE')

clips.RegisterPythonFunction(py_getvar)

print clips.Eval("(python-call py_getvar user)") # Outputs "nil"

# If globals().get('user') is not None: assert something
clips.BuildRule("user-rule", "(neq (python-call py_getvar user) nil)", "(assert (user-present))", "the user rule")
#clips.BuildRule("user-rule", "(python-call py_getvar user)", "(assert (user-present))", "the user rule")

clips.Run()
clips.PrintFacts()

我在 PyClips 支持小组获得了一些帮助。解决方案是确保您的 Python 函数返回 Clips.Symbol 对象并使用 (test ...) 来评估规则 LHS 中的函数。使用 Reset() 似乎也是激活某些规则所必需的。

import clips
clips.Reset()

user = True

def py_getvar(k):
    return (clips.Symbol('TRUE') if globals().get(k) else clips.Symbol('FALSE'))

clips.RegisterPythonFunction(py_getvar)

# if globals().get('user') is not None: assert something
clips.BuildRule("user-rule", "(test (eq (python-call py_getvar user) TRUE))",
                '(assert (user-present))',
                "the user rule")

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

使用 Clips 专家系统中的 Python 函数 的相关文章

随机推荐

  • 如何在 Java AWT 和/或 Swing 中更改光标图像?

    I m making a simple graphics editor i e a paint program I am not planning on anything fancy but I do want my program to
  • Laravel 返回带有旧输入的页面进行验证

    对于更新个人资料页面 我使用路线作为 Route get editdriver data DriverController EditDriver 在我使用验证后的控制器中 return Redirect to editdriver data
  • 如何使用 JavaScript 只允许字母数字字符

    一直在玩 JavaScript 我想做的就是只允许密码字段中的某些字符 a z A Z 和 0 9
  • HTML 阻止空格键滚动页面

    我正在使用代码 window onkeydown function e return e keyCode 32 这正是我想要的 当按下空格键时停止页面滚动 但是 它也会阻止用户在文本框中键入空格 有没有办法在打字时防止空格键滚动并保留空格键
  • .NET DDD 示例 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 您使用哪些 Python 重构工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有很多类想要重命名 其中一些名称很小 并且该名称在其他类名称中重复使用 我不希望更改该名称 其中大部分
  • GitHub Action:如何在 docker 容器内运行命令

    今天刚开始学习CI CD 今天不知道 docker 之前是什么 我能够通过我的 Unity 项目在 CircleCI 上运行 CD 所有运行命令都发生在 docker 容器内 version 2 1 executors unity dock
  • 修复 HTML 视频元素的黑色矩形

    我正在实施 WebRTC 视频聊天 我想实现以下案例 默认情况下 视频元素通过 CSS 具有背景图像 如果没有视频输入 则用户会看到他 或对话者 的头像 No video expected result No video actual re
  • 如何设置 Angular Timepicker 的最短时间和最长时间?

    有没有办法为 Angular 的引导时间选择器设置最短时间和最长时间 使用 Angular 的 Datepicker 设置支持最小和最大日期 我想知道 Timepicker 是否允许类似的功能 查看中的设置Timepicker 的 Angu
  • 如何在 EF Code First 中创建/更新 LastModified 字段

    我想添加一个列 用于在将记录保存到磁盘时存储当前的日期时间 实现这一目标的最佳方法是什么 我知道这不是一个非常复杂的问题 但我想知道 EF 是否有任何最佳实践或任何功能可以简化任务 例如 有没有什么方法可以将该字段的逻辑包含在表类中 以便在
  • Java EE DAO / DTO(数据传输对象)设计模式

    目前 我正在为我的工作项目使用 struts2 框架 在设计我的 DAO 类时 我心中有一个改进设计模式的问题 在我的搜索功能上 我有3种搜索 使用一个参数和另一个参数进行搜索 使用多个参数进行搜索 不带参数搜索 我的问题是 做DAO方法最
  • 如何查询 Sphinx 精确匹配的短语?

    Sphinx 似乎正在逐字搜索文档 我不知道如何在文档中搜索确切的短语 我试过SPH MATCH ALL SPH MATCH PHRASE但所有人都逐字搜索文档 我在我的 PHP 应用程序中使用它 如何查询 Sphinx 以匹配精确的字符串
  • 如何制作“空”RSS 提要

    我对 RSS 提要不太熟悉 但我可以使用 PHP 动态创建提要 而且效果很好 我的问题是 有时提要没有任何项目 我将提要项目的期限限制为 60 天 有时在这段时间内什么也没有发生 我期望发生的是我根本不会有任何
  • 如何在同一台服务器上托管两个公开端口 80 的 Docker 容器

    我有 2 个网站 客户端需要在端口 80 上连接到 每个网站都在自己的容器中运行 我想在同一台 Docker 主机上运行这两个容器 据我所知 80端口只能在主机上暴露一次 存在哪些具有最小开销 管理的解决方案 允许我在同一主机上简单地运行两
  • 从实体框架类获取默认sql值

    我使用的是 T4 模板 对中提出的模板稍加修改this https stackoverflow com a 15936878 1641172答案是从我的 EF POCO 生成打字稿接口 EF Core POCO 首先生成数据库 并且某些数据
  • React TestUtils,如何模拟文档mouseMove?

    我想用TestUtils Simulate mouseMove on the document 我有一个组件Dragger这增加了一个mouseMove事件侦听器document 这是一个不完整的版本 Dragger js use stri
  • 从 readr::read_csv 中读取的数据中删除属性

    readr read csv添加编辑数据时不会更新的属性 例如 library tidyverse df lt read csv A B C na 1 x nb 1 y nc 1 z Remove columns with only one
  • LiveCharts WPF 中单独着色的数据点

    我正在使用 Live Charts WPF 来绘制一些图表 为了使每个栏具有不同的颜色 我添加了多个系列 但它没有显示x axis所有系列的标签 为什么 senderChart Series new SeriesCollection int
  • 如何在 Java 中将布尔数组转换为二进制数组,反之亦然?

    在 Java 中将布尔数组输出到文件 以及从文件输入 的最有效方法是什么 我打算使用一个字符串 每个字符要么是 t 要么是 f 然后我想 为什么不减少八倍的空间呢 NOTE 我实际上不知道哪个答案是更好的方法 我只是选择了彼得的 因为我理解
  • 使用 Clips 专家系统中的 Python 函数

    使用 PyClips 我尝试在 Clips 中构建规则 从 Python 解释器动态检索数据 为此 我注册了一个外部函数 如下所示手册 http pyclips sourceforge net manual pyclips overview