使用 prolog 解决 Caliban 问题

2023-12-13

我正在努力使用学校的序言来解决逻辑难题。线索如下:

  1. 布朗、克拉克、琼斯和史密斯是四位为他们的人民服务的重要公民 作为建筑师、银行家、医生和律师的社区,尽管不一定 分别。

    布朗比琼斯更保守,但比史密斯更自由, 比比他年轻的人打高尔夫球更好,并且拥有 比克拉克年长的男性收入更高。

    比建筑师挣得多的银行家也不是最年轻的 也不是最古老的。

    医生的高尔夫球技术比律师差,但他不那么保守 比建筑师。

    正如所预料的那样,最年长的人是最保守的,并且有 收入最高,最年轻的人是最好的高尔夫球手。

    每个男人的职业是什么?

    提示:根据财富、能力、相对年龄等对人们进行排名 使用数字 1,2,3,4 请注意说明 1 是否代表, 例如,最小的或最大的。这样做可以使比较更容易编码。

To code(如下)将线索给出的所有关系解释为列表的列表,其中每个列表定义

 %[profession,surname,politics,relative_age, relative_salary, golf_ability]:    

profession(L) :- L = [[_,'Brown',_,_,_,_],[_,'Jones',_,_,_,_],[_,'Clark',_,_,_,_],
    [_,'Smith',_,_,_,_]],
member([_,'Brown',P1,A6,M3,G3],L),
member([_,'Jones',P2,_,_,_],L),
member([_,'Clark',_,A3,_,_],L),
member([_,'Smith',P3,_,_,_],L),
    moreconservative(P1,P2),
    moreliberal(P1,P3),
    bettergolfer(G3,younger(_,A6)),
    richer(M3,older(_,A3)),
member(['banker',_,_,A1,M1,_],L),
member(['architect',_,P5,_,M2,_],L),
    richer(M1,M2),
    (A1 = 2;A1 = 3),
member(['doctor',_,P4,_,_,G1],L),
member(['lawyer',_,_,_,_,G2],L),
    worsegolfer(G1,G2),
    moreliberal(P4,P5),
member([_,_,4,4,4,_],L),
member([_,_,_,1,_,4],L).

我像这样定义relative_politics、relative_salary、relative_age和golf_ability关系

EG:

    richer(4,1).
    moreconservative(4,1).
    poorer(1,4).
    poorer(1,3).

所有关系都会如此。

我想我已经忠实地将所有线索翻译成序言,但当我查询数据库时它只是说失败。例如:

   ?- profession(L).
    fail.

我正在使用 NU Prolog。我想知道我是否在翻译线索时犯了错误,或者我遗漏了数据库满足列表 L 的所有条件所需的事实。


bettergolfer(G3,younger(_,A6))...在 Prolog 中它不是这样工作的。相反,有这个

   (  member( X,L), age(X,AX), golf(X,GX),
      (  younger(AX,A6) -> better_golfer(G3,GX) ; true )),
   .....

age( [_,_,_,A,_,_],A).
golf([_,_,_,_,_,G],G).
.....

这意味着,all该人(包括none)比布朗年轻的人,高尔夫球手一定比他差。

这里也有一个问题。既然我们被告知有比布朗年轻的人,那就意味着一定存在最后一个这样的人(与数学中不同)蕴涵的定义)。我们也必须对此进行编码。例如,

    ( member(X,L), age(X,AX), younger(AX,A6) -> true ),
    .....

(当然,为新的日志变量使用唯一的名称)。你必须为你的产品做同样的转变richer(M3,older(_,A3)).

顺便说一句,好主意,以生成方式定义比较谓词:

poorer(1,2). 
poorer(1,3). 
poorer(1,4). 
poorer(2,3). 
poorer(2,4). 
poorer(3,4).
richer(A,B):- poorer(B,A)

如果您将它们定义为算术比较,poorer(A,B):- A<B.,您可能会遇到未实例化变量的问题(最近在这里讨论).

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

使用 prolog 解决 Caliban 问题 的相关文章

  • Prolog 罗马数字(属性语法)

    我正在做一项作业prolog questions tagged prolog扫描数字列表并应返回该列表是否是有效的罗马数字以及数字的十进制值 前任 1 roman N I N 1 true 2 当我运行我认为应该工作的程序时 十进制值总是正
  • 如何计算分数?

    这个问题比任何编程语言都更与逻辑相关 如果问题不适合论坛 请告诉我 我将删除它 我必须编写一个逻辑来计算博客奖网站的博客分数 一个博客可能会获得多个奖项类别的提名 并由评审团以 1 到 5 的等级进行同行评审或评级 1 表示他们完全不喜欢博
  • 以系统的方式报告 Prolog 中查询失败的“原因”

    我正在 Prolog 中寻找一种方法 模式或内置功能 我可以用它来返回why一组谓词失败 至少就数据库中的谓词而言 当用户在系统中提出查询时 我试图能够说的不仅仅是 那是错误的 例如 假设我有两个谓词 blue 1如果某物是蓝色的 则为真
  • 如何为有效号码指定 DCG?

    我正在尝试为有效数字指定 DCG 如下所示 value Number gt valid number Number 基本上检查指定的值是否是数字 它也可能是变量 因此有必要检查 我不知道如何构建这个valid number不过 DCG 谓词
  • Prolog内存问题

    我想找到一种方法来分析我在序言中编写的谓词 一个巨大的谓词 的内存使用情况 我目前正在运行它swi http www swi prolog org and yap http www dcc fc up pt vsc Yap document
  • 总结二维数组

    鉴于我当前的程序 我希望它在用户输入所有值后计算每列和每行的总和 我当前的代码似乎只是将数组的值加倍 这不是我想要做的 例如 如果用户输入具有以下值 1 2 3 2 3 4 3 4 5 的 3x3 矩阵 则看起来就像我在下面的程序中对其进行
  • 在 Java 中,三个 true 输入的 XOR 返回 true。为什么?

    下面的代码 System out println 1 0 0 true false false System out println 1 0 1 true false true System out println 1 1 0 true t
  • 在单个语句中交换三个数字

    是否有可能在一个语句中交换三个数字 Eg a 10 b 20 c 30 我希望按照以下列表更改值 a 20 b 30 c 10 这些值可以在一行中传输吗 python gt gt gt a b c 10 20 30 gt gt gt pri
  • Prolog DCG:找到最后一个元素

    我正在尝试更好地理解 DCG 的用途 为了做到这一点 我尝试将 LearnPrologNow 书中的一些练习转换为 DCG 表示法 然而 我却失败得很惨 我试图编写一个程序 仅命名列表中的最后一个元素 就这样 我只是想不出正确的 DCG 语
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411
  • 如何为这个“移动块”Prolog 练习实现求解谓词?

    我正在使用 Ivan Bratko 的书 人工智能编程 学习 Prolog 我发现实施拟议练习的最后部分有些困难 该练习是一个使用图形来决定如何移动块并按顺序排列它们的程序 这是与程序必须执行的操作相关的图像 正如您在上图中看到的 可以使用
  • 关系代数 - 笛卡尔积与自然连接?

    我正在准备考试 但未能找到一个可靠的标准来确定笛卡尔积是否x要使用或者如果自然连接 X 是要使用的 我想出了一个粗略的指南 如果您需要投影与要连接的表中的属性同名的属性 则必须使用x并说明要投影的表名称 tableA colname1 ta
  • 列表中小于给定数字的数字

    xMenores xMenores X H T R Z xMenores X T Z X gt H R is H xMenores采用三个参数 第一个是数字 第二个是数字列表 第三个是一个列表 是将包含结果的变量 规则的目标xMenores
  • 什么是 NOR 逻辑运算符?

    Is nor a 或 b a 或 b a 和 b 还有什么吗 a 或 b see http en wikipedia org wiki Logical NOR http en wikipedia org wiki Logical NOR了解
  • 查找列表中的最大值 - Prolog

    我刚刚接触 Prolog 并尝试编写一个谓词来查找整数列表的最大值 我需要写一个从头开始比较的内容 另一个从最后开始比较的内容 到目前为止 我有 max2 R max2 X Xs R X gt R max2 Xs X max2 X Xs R
  • 将人员分配到床位 - 自动化方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我每年都会帮助举办青年营 将与会者分配到卧室是一项艰巨的任务 有 92 个卧室 活动持续一周 与会者停留的时间长短不一 而且床需要重复
  • 下面代码中的修剪选择点如何使其更加高效(Prolog)?

    在下面给出的代码中 有 cut 修剪选择点以提高效率 我非常确定reverse谓词和agent do moves谓词是必不可少的 solve task Task Cost agent current position oscar P sol
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • Prolog DCG set_prolog_flag double_quotes 源代码指令位置很重要;文档?

    我通过 SWI Prolog 惨痛地了解到 Prolog 指令的位置set prolog flag重要的是源代码文件 我发现的关于使用指令加载源代码文件的唯一有价值的文档位于加载Prolog源文件 http www swi prolog o
  • 替换 prolog 中的部分表达式

    我需要简化序言中的身份 例如x 0 x x x 0 ETC 为此 我需要替换表达式的部分内容 比如x 0 by x 您能帮我更换吗 Prolog 的一个巧妙之处在于您可以非常轻松地解构算术表达式 您的基本模板将如下所示 simplify X

随机推荐

  • 适用于 Windows 的 Ruby on Rails IDE

    认真的你更喜欢哪一个红宝石 on Rails发展 我已经使用 NetBeans for PHP 和 Java 一年多了 它的效果确实很棒 但恕我直言 Rails 支持还不够好 我经常遇到代码完成问题 它找不到大多数导入的 gem 和函数 而
  • 使用 json-schema 要求或禁止基于另一个属性值的属性?

    我想在 json schema 中完成什么 当属性enabled is true 还需要某些其他属性 什么时候false 这些属性应该被禁止 这是我的 json 架构 type object properties enabled type
  • D3js - 强制定向图 - 相邻节点和链接的高级突出显示,可能吗?

    在我的力导向图的帮助下 我成功地突出显示了来自 Mike Bostock 的教程 现在 对于我的想法和图表需求的进一步过程 我有点卡住了 首先是因为我对 d3js 仍然一无所知 其次 我还没有找到任何类似的东西 为了弄清楚我的意图 您可以在
  • 在 Dart 中何时使用部分/部分与导入/导出?

    我不完全理解之间的区别part part of and import export在 Dart 中使用库时 例如 one dart library one part two dart Class One and two dart part
  • Tkinter:访问使用 for 循环创建的特定小部件

    在我的 tkinter 项目中 我使用 a 为行列表中的每一行创建了一个条目 一个标签和两个按钮for环形 创建时我还将它们保存在列表中 现在我的问题是如何访问它们 例如 如果单击第 12 行的编辑按钮 那么我希望能够获取第 12 个条目的
  • 找到尽可能多的 2 的平方根的数字

    include
  • 从对象字典中获取值 C#

    我正在使用 LiveConnect sdk 来获取一些用户信息 在做了一切必要的事情之后 这就是我得到的结果 id 123456789 name a b first name a last name b link https profile
  • 将兰伯特等角圆锥投影转换为r中的wgs84

    我有兰伯特等角圆锥投影 x y 信息 我需要 WGS84 坐标 但我不知道lcc到底是什么 我在下面提供了 lcc 信息 有没有办法在r中将lcc转换为WGS84 example lcc x y xy lt cbind c 509535 7
  • Azure 应用服务在长 POST 请求时返回 413 有效负载太大

    在本地 这是可行的 但是当使用具有很长 似乎超过 100 000 个字符的任何内容 请求正文的 POST 请求访问我们的 Azure 应用服务 API 时 我们会收到 413 Payload Too Large 响应 这是一个相当长的 HT
  • 在 JavaScript 中从下拉列表中获取多个值

    如何使用 JavaScript 函数获取下拉列表中选择的值 用户可以从两个元素中选择多个值 以下是我正在使用的元素 提前致谢
  • 如何将列表中的所有整数相乘[重复]

    这个问题在这里已经有答案了 你好 我想将列表中的整数相乘 例如 l 1 2 3 l 1 2 2 2 3 2 output l 2 4 6 所以我在网上搜索 大多数答案都是关于将所有整数相乘 例如 1 2 3 Try a 列表理解 l x 2
  • 如何在多个视图控制器中从最后一个视图控制器移动到第一个视图控制器

    嗨 我是 iPhone 编程新手 有人可以帮我吗 我有多个 viewController 在第一个名为 HomeViewController 的 ViewController 中 我调用了该方法 self presentModalViewC
  • 密码分页总结果计数

    我有一个巨大的密码查询 我需要对其结果进行分页 我想做的是在限制完成之前获取结果总数 这是我的测试图 http console neo4j org id 6hq9tj 我尝试使用count o 在查询的所有部分 但我总是得到相同的结果 总数
  • 无法在 android api 23 上打开位置?

    我使用了以下代码 请求许可的对话按预期显示 但当我点击 允许 时 它什么也没做 日志消息不会显示为好像未授予权限 因此我转到参数来验证位置是否为 打开 以及 关闭 难道不是因为我授予应用程序访问我的位置的权限而应该打开它吗 如果我手动 打开
  • 如何为维恩图准备 Pandas df

    我有一个 Pandas 数据框 如下所示 ID VALUE A Today A Yesterday B Tomorrow C Tomorrow D Today D Tomorrow E Today
  • 获取 XML 文档注释

  • 如何收听N个频道? (动态选择语句)

    要开始执行两个 goroutine 的无限循环 我可以使用下面的代码 收到消息后 它将启动一个新的 goroutine 并永远持续下去 c1 make chan string c2 make chan string go DoStuff c
  • Schema.org 在一页上设置多个事件

    是否有一种正确的方法可以在 Schema org 的一个页面上显示多个事件 理想情况下 我们不希望每个事件都有一个页面 这是我们想要的示例结构 div div h2 Chili Cookoff h2 div div h3 span Manh
  • 如何将 knockout.js 与 ASP.NET MVC ViewModel 结合使用?

    Bounty 已经有一段时间了 我仍然有几个悬而未决的问题 我希望通过增加赏金也许这些问题能够得到解答 如何将 html 助手与 knockout js 一起使用 为什么需要准备好文档才能使其正常工作 有关更多信息 请参阅第一次编辑 如果我
  • 使用 prolog 解决 Caliban 问题

    我正在努力使用学校的序言来解决逻辑难题 线索如下 布朗 克拉克 琼斯和史密斯是四位为他们的人民服务的重要公民 作为建筑师 银行家 医生和律师的社区 尽管不一定 分别 布朗比琼斯更保守 但比史密斯更自由 比比他年轻的人打高尔夫球更好 并且拥有