如何在 Prolog 中为变量(如字符串)分配多个值?

2024-04-17

今天早些时候,我寻求帮助以在序言中构建数据库以及如何通过参数搜索,有人提出了这个:

您还可以向每个处理器添加术语列表,例如:

processor(pentium_g4400, [brand('intel'),    family('pentium'),
                          series('g4400'),   clock(3.3),
                          socket('lga1151'), ram('ddr4'),
                          cores(2),          threads(2)]).

在这种情况下,您可以使用以下方式查询:

processor(Proc, Specs), member(family('pentium'), Specs).

它工作得很好,但是,命令“member”似乎不符合规则:

build(ProcSpecs, RamSpecs, MoboSpecs):-
        processor(NameProc, PSpec), member(ProcSpecs, PSpec),
        component_ram(NameRam, RSpec), member(RamSpecs, RSpec),
        motherboard(NameMobo, MSpec), member(MoboSpecs, MSpec),
        write("-----------------------------"), nl, 
        write("Processor: "), write(NomeProc), nl,
        write("Ram: "), write(NomeRam), nl,
        write("Motherboard: "), write(NomeMobo), nl.

如果我这样查询:

build(ram(ddr4), ram(ddr4), ram(ddr4)).

(或者输入我想搜索的任何其他参数) 它回答了我与参数匹配的组件列表(这是我正在寻找的结果)。 但是,如果我尝试使用“member”设置多个参数,如下所示:

build(ProcSpecs, RamSpecs, MoboSpecs), member(socket('lga1151'), ProcSpecs), member(ram('ddr4'), ProcSpecs), member(ram('ddr41'), RamSpecs), member(socket('lga1151'), MoboSpecs), member(ram('ddr4'), MoboSpecs).

它开始列出数据库中的每个组件,似乎发生这种情况是因为没有为变量分配任何内容。 整个数据库在这里:https://pastebin.com/1Yy6cTV9 https://pastebin.com/1Yy6cTV9


查看您的数据库文件,我认为您今天早些时候得到的建议不是正确的方向。我可能会将其作为直接关系数据库来处理,具有如下表:

% processor(Id, Brand, Family, Series, Clock, Socket, RAM, Cores, Threads).

然后我会重新创建你制作的数据库,如下所示:

processor(pentium_g4400, intel, pentium, g4400, 3.3, lga1151, ddr4, 2, 2).

这就是您对关系数据库所做的事情,我认为这也是您应该在这里做的事情。现在,如果您只想查询一方面,您可以按位置进行查询:

?- processor(Processor, _, pentium, _, _, _, _, _, _).
Processor = pentium_g4400 ;
...

然后你会对另外两个亲戚做同样的事情:

component_ram(corsair_dominator_platinum_8gb_ddr4, corsair, dominator, platinum, '8gb', ddr4).
motherboard(asus_prime_z270m-plus, asus, prime_z270m-plus, z270, lga1151, 4, ddr4).

现在,只需在两个地方使用相同的变量即可完成“连接”:

?- processor(Processor, _, _, _, _, Socket_type, RAM_type, _, _),
   component_ram(RAM, _, _, _, _, RAM_type),
   motherboard(Motherboard, _, _, _, Socket_type, _, RAM_type).

这会产生 3 路连接。并且您可以使用更多变量从您获取的三个记录中获取更多信息:

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

如何在 Prolog 中为变量(如字符串)分配多个值? 的相关文章

  • MS Access:在列中搜索星号/星号

    我正在寻找一种方法来搜索包含字符串数据类型的列 问题是星号或星号是保留符号 以下查询无法正常工作 select from users where instr pattern 如何编写 Access 查询来搜索列中的星号 您可以使用方括号在
  • 如何在SQLite中的两个表之间复制数据?

    我有两个具有不同列的表 如下所示 table1 id title name number address table2 id phone name address 如何将数据 名称 地址 从表 1 复制到表 2 我的问题有两种情况 第一 t
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • 寻找免费的 GUI 工具来使用 PostgreSQL [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目前 我正在使用独立的 GUI 工具DbSchema http www dbschema com 设计
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • 如何在 PHP MYSQL 中将数据库表和每条记录从一台数据库服务器复制到另一台数据库服务器?>

    您好 我编写了一段代码 可以将数据库表从一个服务器复制到另一个服务器 但是每个表的记录没有复制 如何编写一个可以将表和每个记录从一个数据库服务器复制到另一个数据库服务器的函数 这是我的示例代码
  • 如何将数据库查询的行转换为 XML 文件?

    我正在开发一个 Delphi 应用程序 该应用程序需要从一段工作中获取行并将其转换为单个 XML 文件 以便上传到第三方 Web 服务 有没有可用的组件或库可以做到这一点 如果不是 那么构建 DB2XML 转换器的最佳代码方法是什么 我注意
  • F# 和模糊逻辑

    我知道这可能听起来很奇怪 但我想知道 Microsoft Visual F 正在进入的这个新世界中的一件事 这种语言有很多应用 我要学习 关于解析 函数式编程 结构化编程 但是人工智能呢 模糊逻辑有什么应用吗 F 是一种适合模糊逻辑应用程序
  • 为什么在 C++ 中将变量定义和初始化分开?

    我目前正在研究一些相当古老的 C 代码 经常发现类似的东西 int i i 42 or Object someObject NULL someObject new Object or even Object someObject someO
  • 斜线(/)在序言中做什么?

    我有这个代码 set value X Value X T X Value T set value X Value Y V T Y V NewT X Y set value X Value T NewT set value X Value X
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • SQL 按计数排序

    如果我有一个表和这样的数据 ID Name Group 1 Apple A 2 Boy A 3 Cat B 4 Dog C 5 Elep C 6 Fish C 我希望根据 Group 的总和从小到大进行排序 例如 A 2条记录 B 1条记录
  • SQL Server 批量插入 - “批量加载数据转换错误”

    bulk insert dbo A FROM d AData csv WITH FIELDTERMINATOR ROWTERMINATOR n 将批量数据插入数据库时 在检查可疑数据后 我遇到了无法解释的错误 消息 4867 16 级 状态
  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • 计算 mysql 数据库行数的最佳方法

    在遇到 mysql 查询加载时间慢的问题后 我现在正在寻找计算行数的最佳方法 我曾经愚蠢地使用过mysql num rows 函数来做到这一点 现在意识到这是最糟糕的方法 我实际上正在制作一个分页来用 PHP 制作页面 我找到了几种计算行数
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • Prolog:子句在源文件中不在一起

    我有这段代码 Family tree female pen male tom male bob female liz female pat female ann male jim parent pam bob parent tom bob

随机推荐

  • 如何在winform和wpf中以编程方式实现鼠标移动、单击、右键单击和按键等?

    如何在 winform 和 wpf 中以编程方式移动鼠标 单击 右键单击和按键等 如果可能的话 请帮我提供代码片段 如果我正确理解你的问题 那么你想真正模拟输入 在这种情况下SendInput是要走的路 从这个链接 http robrely
  • 存储过程中的 SQL case 语句

    我有一个包含 CASE 语句的 SQL Server 存储过程 但是 如果多个条件成立 我需要附加这些值 因此 如果某个特定记录有失效日期 And 超出里程 我希望这两个值都显示在不可归档原因柱子 我将如何实现这一目标 CASE WHEN
  • 查找列表中不常见的元素

    我正在尝试编写一段可以自动分解表达式的代码 例如 如果我有两个列表 1 2 3 4 和 2 3 5 代码应该能够找到两个列表 2 3 中的公共元素 并组合其余的元素元素一起组成一个新列表 即 1 4 5 从这篇文章 如何找到列表交集 htt
  • Perl 6 语法与我认为的不匹配

    我正在做代码出现第 9 天 http adventofcode com 2017 day 9 您坐了一会儿并记录了流的一部分 您的谜题输入 这些字符代表组 开头的序列 并结束于 在一个组内 有零个或多个其他东西 用逗号分隔 要么是另一个组
  • Python 中检查两个冻结集是否相等的时间复杂度

    在网上找不到详细信息 当比较两个冻结集时 Python 是否会迭代其中一个集合中的元素 或者是否检查冻结集的哈希值 因为冻结集是可哈希的 由于参考文档对此没有任何说明 因此它依赖于实现 因此除了查看您正在使用的 Python 版本的源代码
  • Kotlin 中的变量,与 Java 的区别:“var”与“val”?

    我在尝试学习Kotlin https en wikipedia org wiki Kotlin programming language 什么是val var and internalKotlin 与 Java 相比 In Java Rad
  • 在 NSTextField 中输入时过滤 NSTable - 自动选择第一行

    我有一个NSTextView过滤的字段NSTable表作为用户在输入中键入的内容 我已经成功实现了表过滤 现在 我的目标是自动选择第一个结果 表中的第一行 并允许用户在键入搜索查询时使用箭头键在结果之间移动 在表中的结果之间移动时 输入字段
  • 如何在 Windows 上的 Perl 中访问包含空格的路径?

    我正在将 Unix Perl 脚本转换为在 Windows 上运行 我遇到的问题是路径中含有空格 open IN C Program Files MySQL MySQL Server 5 1 bin mysql exe u root ppw
  • 从 App.xaml.cs 导航

    我想将应用程序栏添加到我的应用程序的多个页面 因此 我将应用程序栏定义为应用程序资源 以便它可以被多个页面使用 现在 这些按钮的事件处理程序位于App这里提到的类http msdn microsoft com en us library h
  • 如何确定所选节点是 TreeView 中的子节点还是父节点?

    如何判断所选节点是子节点还是父节点TreeView控制 具体如何实现此类检查取决于您如何定义 子 和 父 节点 但每个都暴露了两个属性TreeNode提供重要信息的对象 The Nodes财产 http msdn microsoft com
  • 如何编写本地化的屏幕键盘

    我必须为我们公司的程序编写一个屏幕键盘 该程序主要用于具有触摸功能的工业PC 我们不能使用windows默认键盘 因为我们不需要键盘上的所有按键 所以我被要求用 C 编写一个自定义的 我已经找到了这个博客 http www siao2 co
  • pandas - 数据框中唯一行出现的数量

    如何计算每个唯一行的出现次数DataFrame data x1 A B A A B A A A x2 1 3 2 2 3 1 2 3 df pd DataFrame data df x1 x2 0 A 1 1 B 3 2 A 2 3 A 2
  • AWS Lambda:无法导入模块

    请原谅我 我对 Lambda 和 Node 都是新手 我正在尝试复制this https gist github com bhberson 7a2847888596e67fd69bgit 使用 AWS IoT 按钮订购披萨 我当前的代码是
  • 根据屏幕尺寸有固定方向

    我在手机上构建了一个 Android 应用程序 现在我要更新该应用程序以支持平板电脑尺寸的屏幕 特别是 Galaxy Tab 10 1 我弄清楚了整个res layout的事情 所以没关系 但是 我构建的应用程序具有固定的屏幕方向Andro
  • iPhone 平台的开源框架/项目 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找适用于 iPhone 平台的开源框架 项目集合 我发现了很多好的框架和资源 例如ASIHTTP
  • 使用 appSettings 配置自定义 Serilog 接收器

    我创建了一个新的 Serilog 自定义接收器 并尝试通过 appSettings 配置它 自定义接收器名为 DiagnosticsBroadcaster 它的 LoggerSinkConfiguration 扩展是 public stat
  • 更新 WooCommerce 产品价格和库存

    我有外部 REST API 我从中构建一个如下所示的数组 arr array 1 gt array code gt 0100686 qty gt 2 price gt 65 22 2 gt array code gt 0100687 qty
  • 使用groupSVGElements后如何选择子元素

    我正在将 svg 加载到具有子元素的 Fabric 中 我使用 groupSVGElements 对它们进行分组 我需要能够选择每个子元素 这是一个 onclick 事件 允许我选择一个子对象 我把这个小提琴放在一起http jsfiddl
  • 如何从 WebAPI 中的自定义绑定器调用默认模型绑定?

    我在 WebAPI 中有一个自定义模型绑定器 它使用 Sytem Web Http ModelBinding 命名空间中的以下方法 该方法is用于为 Web API 创建自定义模型绑定程序的正确命名空间 public bool BindMo
  • 如何在 Prolog 中为变量(如字符串)分配多个值?

    今天早些时候 我寻求帮助以在序言中构建数据库以及如何通过参数搜索 有人提出了这个 您还可以向每个处理器添加术语列表 例如 processor pentium g4400 brand intel family pentium series g