Prolog 在单独的数据库文本文件上插入、修改和删除事实

2023-12-09

我有一个包含很多事实的序言数据库文件knowledge.pl。例如:

father_of(joe,paul).
father_of(joe,mary).
mother_of(jane,paul).
mother_of(jane,mary).
male(paul).
male(joe).
female(mary).
female(jane). % and so on.

每次我的程序再次执行时都会查阅该文件(consult/1)。

我希望能够通过直接在此数据库文本文件中写入或删除来插入、修改和删除我想要的事实(其中一些是直接的,另一些是满足某些特定条件的)。

类似于assertz、retract 和retractall,但修改此文本文件,以便更改永久保留在那里。

我该怎么做?


您可以创建所需的事实并将它们写入(同一)文件中,也可以修改数据库然后将其保存在文件中。

不同之处在于,使用第一种方法,您将加载旧文件的数据库,而第二种方法将在执行过程中更改它。

从你提出问题的方式来看,我假设你想做第二个;为此,您应该:

1)将所有要更改的谓词声明为dynamic2)执行过程中的断言、撤消等 3)将新数据库写入文件。您可以使用清单/1

要编写,您可以执行以下操作:

tell(knowledge),
.....
told.

或者你可以使用其他一些io 谓词。也许使用set_prolog_IO/3将是最简单的方法。

现在,如果您想要第一个,您应该构造谓词(可能使用大学运营商) 或其他字符串操作谓词,然后将它们写入文件

EDIT:

有listing/0,但这将列出所有加载的谓词(您可能不想要的东西)。 经过一番搜索我发现源文件/2;所以你可以做类似的事情

findall(X,source_file(X,FileName),L).

请注意,source_file/2 需要absolute文件名。您可以使用绝对文件名/2为拿到它,为实现它 source_file/2 格式化谓词的方式有点奇怪(我期待类似 foo/1 的东西),但看起来你可以将它提供给Listing/1 并且它工作正常,所以你可以执行以下操作:

save(FileName):-
    absolute_file_name(FileName,Abs),
    findall(X,source_file(X,Abs),L),
    tell(FileName),
    maplist(listing,L),
    told.

另一方面,您始终可以拥有一个包含要存储在文件中某处的谓词的列表

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

Prolog 在单独的数据库文本文件上插入、修改和删除事实 的相关文章

  • 哪个数据库对复制的支持最好

    我对 MySQL 复制的功能有相当好的感觉 我想知道还有哪些其他数据库支持复制 以及它们与 MySQL 和其他数据库相比如何 我的一些问题是 复制是内置的还是附加组件 插件 复制是如何工作的 高级 MySQL 提供基于语句的复制 5 1 中
  • C# 数据库插入 (ASP.NET) - ExecuteNonQuery:CommandText 属性尚未初始化

    我第一次从 ASP NET C 进行插入 遇到了一些问题 每次运行此代码时 我都会收到以下错误 ExecuteNonQuery CommandText 属性尚未初始化 有谁知道这意味着什么以及如何修复它 提前致谢 string sqlQue
  • 如何编写Alter Table并添加新列?

    我有一个表 有 3 列 A B C 其中也有行 A 列是主键 现在 根据新的要求 我需要添加新的 D E 和 F 列 另外 我需要从 A 列中删除以前的主键 并为 D 列添加新的主键 E 列和 F 列为 NULL 请帮助我创建 alter
  • Prolog:在图中查找路径的子句顺序

    我有一个带有入口和出口节点的循环图 我想找出从任何入口到任何出口节点的所有路径 entry a exit e exit f next a b next b c next b d next c e next d f Cycle next c
  • 为什么在我添加冗余约束之前此 clpfd 查询不会终止?

    我编写了一些谓词 它们采用列表的长度并附加一些约束 这是要使用的正确词汇吗 clp length 0 clp length Head Rest Length Length gt 0 Length Length1 1 clp length R
  • 保持服务器和客户端之间的验证逻辑同步[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 In my 上一个问题 https stackoverflow com questions 39371 database exception h
  • Android远程数据库

    我正在开发一个需要连接到中央数据库的 Android 应用程序 用户应该能够通过应用程序访问记录并将记录添加到数据库中 数据本身相当简单 每条记录都由许多文本字段组成 该数据库将专门为应用程序开发 并且只需要通过应用程序进行访问 初步阅读似
  • 在Firestore中管理createdAt时间戳

    每天我都会将产品从外部零售商进口到谷歌云Firestore https firebase google com docs firestore 数据库 在此过程中 产品可以是新的 新文档将添加到数据库中 或现有的 现有文档将在数据库中更新 应
  • 数据库设计 - 类别和子类别[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要在类似于黄金页面的东西上实现分类和子分类 假设我有下表 类别表 CategoryId Title 10 Home 20 Business
  • SQLite 连接在 C# 中不起作用

    我正在使用操作 SQLite 数据库的 C 应用程序 直到昨天它工作正常 它正在检索记录 但从昨晚开始 连接字符串返回 Data Source null 下面是测试代码 using System using System Collectio
  • 将 Wamp 服务器升级到 MySQL 8.0.15

    因此 我最近在几个月前安装了 WampServer 并预装了 mySQL 5 7 但我想利用 mySQL 8 附带的 NoSQL 功能 为了更新它 我下载了最新的MySQL版本 将文件夹解压到wamp64的bin目录中 然后 我从 5 7
  • 将波斯语字符串发送到mysql

    我正在尝试发送Persian字符串到mysql数据库 但它将数据保存为这样的 D8 AC D8 AF DB 8C D8 AF 英文字符串没有问题 var new this val ajax url url new type GET succ
  • 为 Couch Base Server 1.8 和 2.0 构建 Erlang 客户端

    我们已经用过沙发基地服务器 http www couchbase com 在我们的产品中 它是一个内联网应用程序 其前端是纯JavaScript 然而我们使用Erlang OTP http erlang org对于业务逻辑 身份验证 Mne
  • PostgreSQL - 返回多列的函数

    这是一个提供 2 列结果的函数 在这个函数中有一个Loop被用来返回结果 功能 Create Type Repeat rs as label text count bigint CREATE OR REPLACE FUNCTION Repe
  • MySQL 中如何使用继承?

    所以我正在读一本关于数据库设计原理的书 并读到了有关继承的章节 但我对如何在 MySQL 中将子类与其超类 连接 感到困惑 The table structure would for example look like this 那么我如何
  • 使用 DCG 解析变量

    我在使用 Prolog 的 DCG 表示法将以大写字母开头的序列解析为变量时遇到问题 例如 如果我有字符串 f a X y Z X 以及解析该字符串的 DCG 是否有任何方法可以将每个大写字母解析为唯一的 Prolog 变量 例如 解析Y到
  • Microsoft SQL 数据库的 WebSocket 侦听器

    我目前正在开发一个项目 该项目必须使用 WebSockets 作为将数据传输到客户端的方式 基础设施看起来像这样 客户端 gt Web 服务器 gt Microsoft SQL 数据库 我想最理想的情况应该是这样的 客户端打开一个到服务器的
  • SSD 上的 MySQL 基准测试:工具和策略

    我目前正在将我的服务器从在硬盘驱动器上运行 MyISAM 切换到在 SSD 上运行 InnoDB 我有一个3 800 000 行 16GB 表作为基准表 我的服务器设置 Ubuntu 64 Nginx MySQL 5 5 我心里有两件事我想
  • 如何获取表中所有列的计数(*)?使用 PostgreSql

    我有一堆表 其中几个有数百列 我需要获取每列的非空值计数 并且我一直在手动执行此操作 我想找出一种方法来获取表中所有列的所有计数 我查了 stackoverflow 和 google 但找不到答案 我尝试了这个 但它只是为每列返回 1 的值
  • 部署 Visual Studio 2010 数据库项目

    我有一个 Visual Studio 2010 数据库项目 我想从中生成一个脚本 这只是将该数据库放到另一台机器上 问题是我找不到 对此的解决方案 当我开始这个项目时 我从开发电脑上的数据库导入了 shema 生成了架构对象 所有表和脚本都

随机推荐

  • SQL-收缩数据库日志文件

    我正在尝试缩小我的数据库日志文件 我尝试过运行 USE databasename BACKUP log databasename WITH truncate only DBCC shrinkfile databasename log 1 我
  • 如何定义一个将函数文字(带有隐式参数)作为参数的函数?

    我希望能够在这些行上做一些事情 不会编译 def logScope logger Logger operation implicit l Logger gt Unit code operation logger code def opera
  • 在MyBatis中插入子对象

    我有一个非常简单的对象图 我想使用 MyBatis 将其存储在数据库中 如果我创建一个全新的对象图 具有两个细节的 BatisNode 如何编写代码以确保创建子对象 详细信息如下 public class BatisNode protect
  • 如何解决错误 1060:使用视图 -> 创建视图重复列名

    我正在尝试通过连接 Sakila 数据库中的一些表 在 MySQL 中 来创建视图 https dev mysql com doc sakila en 即我要加入付款 员工和客户 并显示客户姓名 员工姓名 付款id和金额 我右键单击 视图
  • 使用 iText 生成 pdf 的锚定方法的相对路径

    我使用 iText 生成 PDF 并使用以下代码创建锚点 String newPath file newPath newPath completePath trial setAnchor newPath The trial对象属于类型Chu
  • Htaccess:从 URL 添加/删除尾部斜杠

    我的网站运行一个名为 gt WSS 壁纸脚本的脚本 我的问题 gt 我一直在尝试强制删除或在 URL 末尾添加尾部斜杠 以防止重复内容并清理我的 URL 我已经尝试了各种方法并尝试了我能想到的一切并从互联网上加载 但还没有这样的运气 这可能
  • Nuxt.js 与 TypeScript:类型“y”上不存在属性“x”

    我是 Vue 和 Nuxt 的新手 目前正在制作 TypeScript 教程 它给我带来了一堆错误Property x does not exist on type y 下面是一个例子 ERROR in components AboutMe
  • 带隐私的伪经典继承?

    In JavaScript 好的部分克罗克福德认为 使用伪经典继承模式的缺点之一是它公开公开实例变量 例如 var Ball function width color this width width this color color va
  • javascript:如何在没有jquery的情况下编写$(document).ready之类的事件

    在 jquery document ready function 或 function 中 如果没有 jquery 我怎么能做同样的事情 并且我需要浏览器兼容 并允许附加多个函数 注意 dom准备好 窗口onload 这就是 jQuery
  • 如何从给定字段长度的固定长度文本文件创建 DataFrame?

    我正在阅读固定位置文件 文件的最终结果存储在字符串中 我想将字符串转换为DataFrame进一步处理 请帮助我解决这个问题 下面是我的代码 输入数据 PRGREFNBR 值 01 11 苹果 真 0 56 02 12 梨 FALSE1 34
  • 在 php 和 Ruby On Rails 应用程序之间传递身份验证

    我有一个简单的 Ruby on Rails 应用程序 我想将其与现有的 php 网站集成 我只希望通过 php 应用程序身份验证的用户能够访问我的 Ruby on Rails 应用程序 它应该对用户显示为同一域中的同一网站 但如果我选择 它
  • 将 C++ 类型信息保存到文件中以供跨程序调用使用

    Edit 如果需要 可以使用更多上下文来突出显示实际问题 我想实现以下方法 template
  • 在 HTML5 中无限循环加载视频

    我希望在 HTML5 页面中放置一个视频 该视频将在页面加载时开始播放 完成后 不间断地循环回到开头 视频应该还可以NOT有任何与之关联的控件 并且要么与所有 现代 浏览器兼容 要么可以选择填充 以前我会通过以下方式完成此操作Flash a
  • 选择 blob 上的不同值

    有没有办法验证 Oracle 数据库中更多行中 blob 中的值是否相同 blob 是同一列 我将 blob 的大小存储在另一列中 但我需要知道该值是否也相等 存储的值是序列化对象 我建议添加另一列 其中包含hashblob 值的 当您存储
  • 在SVG线性渐变停止偏移中绑定Angular2值?

    我想在线性梯度停止偏移中使用绑定 angular2 值 但它给了我错误 有人可以告诉我如何在线性渐变的停止偏移中绑定 angular2 值 如下所示 测试组件 ts import Component EventEmitter ViewEnc
  • Angularjs 创建输入掩码

    我正在尝试创建一个指令来为我的输入创建自定义掩码 我知道还有其他库可以使用 但有时我需要根据公司需求进行自定义输入 例如 OS 012 08765 所以我宁愿创建自己的指令 到目前为止 我能够在我需要的模式上格式化数字 但不能在输入上格式化
  • 基本 PowerShell 功能无输出

    自从我开始使用 PowerShell 以来已经有一段时间了 到今天我可以说我已经完成了很多日常任务 不过 在学校每天都是新的一天 现在 当我开始使用函数时 我再次绊倒了 这是我的问题 即使使用许多初学者教程中的最简单的功能 它也无法在我的工
  • 如何使用导出Excel并打印数据表中选定的列?

    我想使用导出 Excel 并打印数据表 我使用以下代码 但无法对选定的列使用这两个选项 example DataTable dom Blfrtip buttons extend excel print exportOptions colum
  • 在 PHP 中生成随机密钥的最佳方法是什么?

    我正在寻找创建一个可重用的函数 它将生成一个随机密钥 其中包含选定长度的可打印 ACSII 字符 从 2 到 1000 我认为可打印的 ASCII 字符为 33 126 它们的密钥不需要完全唯一 如果在完全相同的毫秒内生成则唯一 所以uni
  • Prolog 在单独的数据库文本文件上插入、修改和删除事实

    我有一个包含很多事实的序言数据库文件knowledge pl 例如 father of joe paul father of joe mary mother of jane paul mother of jane mary male pau