首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么`f(a)=a`失败,而`f(X)=X`在prolog中成功?

在Prolog中,f(a)=a失败而f(X)=X成功的原因是因为Prolog采用了逻辑编程的方式进行推理和求解。在逻辑编程中,我们通过定义事实和规则来描述问题,然后通过查询来获取满足条件的解。

对于f(a)=a这个查询,Prolog会尝试匹配f(a)a这两个项。然而,Prolog中的匹配是基于模式匹配的,而不是基于数学等式的相等性。在这种模式匹配的过程中,Prolog会尝试将f(a)中的fa中的a进行匹配,但由于它们不相等,匹配失败。

而对于f(X)=X这个查询,Prolog会尝试寻找一个变量X的值,使得f(X)X匹配。在这种情况下,Prolog会将X绑定为f(X)中的X,因为它们是相同的变量。因此,这个查询成功,并且X的值为f(X)中的X

总结起来,Prolog中的匹配是基于模式匹配的,而不是基于数学等式的相等性。这也是为什么f(a)=a失败,而f(X)=X在Prolog中成功的原因。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

0x3f3f3f3f常量在编程的妙用

)依然不能满足我们 到网上找了下,发现很多大牛都是用0x3f3f3f3f这个常量,究竟这样做有什么优点呢?...0x3f3f3f3f的十进制是1061109567,也就是10^9级别的(和0x7fffffff一个数量级),一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用不致出现数据大于无穷大的情形...另一方面,由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出(这就满足了“无穷大加一个有穷的数依然是无穷大”),事实上0x3f3f3f3f+0x3f3f3f3f=2122219134...最后,0x3f3f3f3f还能给我们带来一个意想不到的额外好处:如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a))这样的代码来实现(方便高效),但是当我们想将某个数组全部赋值为无穷大时...现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f

91820
  • 有“贝”“莱” 强势围观 | 采用openSAFETY的X20安全产品半导体设备的应用 004

    JZGKCHINA 工控技术分享平台 尊重原创 勿抄袭 勿私放其他平台 原创投稿 004 采用openSAFETY的X20安全产品半导体设备的应用 韩云晶 一、应用背景 半导体设备例如涂胶机、显影机...贝加莱的X20安全产品不仅能够轻松满足笔者提出的三点要求,有效避免施耐德、欧姆龙安全产品存在的不足。...图3 显影设备安全系统配置原理图 图4 显影设备的实际应用 图5 清洗设备安全系统配置原理图 图6 清洗设备的实际应用 三、软件实现主要步骤 软件编程之前需要安装Automation...2设置中间变量进行关联对应 图10 实际通讯的读写数据变量关联中间变量 5、每个安全I/O模块输入输出点同样与步骤2设置中间变量进行关联对应 图11 输入模块各个点位关联中间变量 安全输出模块提供两种不同的方法来操作输出...、直观的安全编程方式等方面的优势,已推出同类安全产品的各个品牌,始终能够保持领先地位。

    59920

    逻辑式编程还有用吗?--“三维度”逻辑编程语言的设计(2)

    不知道这位朋友具体是出于什么原因这么认为的,我认为一个东西不流行不代表它是失败的、被否定的事物。...此外,常用的函数式语言还有scala, erlang, F#, Haskell等,说到.NET就不能不提到F#,.NET 5.0将伴随C#9.0同步发布最新的F# 5.0,可见F#软微开发语言中的重要地位...奇怪的是,F#国内鲜有使用,而在国外被称为薪水最高的编程语言,如下图2019编程语言薪资排行榜。 ?...本文中,我将这种“看情况”有一个正式的词语来表达--场景,在当前的游戏人生故事,这里的问题就是“生育场景”的问题。...角色与场景的交互过程,角色和场景的改变可能会诞生新的角色、产生新的场景,而这种变化可以体现在时间维度上。

    5K20

    Objective-Ckotilin 混编项目函数调用栈异常排查笔记(1) - Fast Unwind 与序章

    对于其他栈帧,这是控制权返回到该栈帧之后执行的第一条机器指令的地址。 main:完全符号化的崩溃报告,代表函数的名称。出于隐私原因,苹果提供的函数名会限制到前 100 个字符。...如果源文件的行号为0,则表示该 栈帧 不会映射到原始代码的特定代码行。...Fast unwind 实现原理 Fast unwind 实现原理依赖以下两个机制: 编译器或者开发者 prolog 阶段按照规则保存栈帧信息 带链接的跳转指令(比如 arm64 的 bl 指令会更新...每个函数每次退出时会有一个 epilog ,每个函数通常只有一个 prolog可以有多个 epilog。...) 简介 Fast unwind 介绍和背后的机制: 编译器或者开发者 prolog 阶段按照规则保存栈帧信息 带链接的跳转指令(比如 arm64 的 bl 指令会更新 lr) prolog(序章)

    1.5K10

    prolog到LTN,AI的逻辑推理能力1

    它描述了解决方案不是计算步骤。基于该描述,计算机解决了该问题。...从这点来说,描述问题的解决方案比设计解决问题的方法容易得多,逻辑编程时,我们不需要关心寻找结果的过程,这就是逻辑编程具有吸引力的原因。...逻辑编程,我们需要建立建立变量(未知数)和值(知识)之间的约束关系,例如: x * 2 + y * 2 == 16 就是一条建立好的约束关系,我们只需编写到这一步即可,剩下的逻辑编程语言会自动计算出有效的结果...学习逻辑编程,可以先从Prolog学起。...注意,prolog的每条命令结尾需要添加一个 . 号 终端会打印出Hello Mixlab的字样,恭喜,prolog运行成功。 如何退出prolog?终端输入: halt. 即可退出prolog

    2.9K10

    【算法】深入理解 Prolog:逻辑编程的奇妙世界

    欢迎各位读者来到本篇博客,今天我们将探讨一个令人着迷的编程范式——PrologProlog(Programming in Logic)是一种基于逻辑的编程语言,以其独特的特性和应用领域备受关注。...1.2 规则和事实 Prolog ,我们定义一系列事实和规则,然后通过提出查询来获取有关这些事实和规则的信息。例如: father(john, jim). father(john, ann)....Prolog 的语法 2.1 事实 Prolog ,事实是由谓词和参数组成的陈述。例如: likes(john, pizza). 这表示 John 喜欢披萨。...2.2 变量 Prolog 的变量以大写字母开头,例如: likes(X, pizza). 这表示存在一个 X,他喜欢披萨。 3. 实际应用 Prolog 广泛应用于人工智能和专家系统领域。...进一步学习和实践,你将能够更深入地探索 Prolog 的神奇之处。希望这篇博客能够激发你对逻辑编程的兴趣,欢迎继续探索这个奇妙的世界!

    49210

    Spidermonkey_spider是什么意思

    所​有​解​释​器​的​状​态​保​存​​一​个​J​S​C​o​n​t​e​x​t​​,​所​以​S​p​i​d​e​r​M​o​n​k​e​y​绝​大​部​分​函​数​都​要​带​一​个​参​数​...dynamic scoping: 变​量​随​着​控​制​流​的​进​入​​绑​定​​s​t​a​c​k​上​,​随​着​控​制​流​的​结​束​​从​s​t​a​c​k​上​弹​出​。​...Example: int x = 0; int f() { var x; return x; } int g() { int x = 1; return f(); } print g(); 输出0....脚本执行的时候,prolog section首先被执行。 main section: 保存主执行码。prolog section执行结束后执行。...参数和局部变量在运行时才可访问,存储执行上下文Stack Frame。 生成闭包时,parameters,local variables都将作为call object的属性被访问。

    81120

    强化学习离轨策略:从失败获得成功经验 - 以追女孩为例 | 采样率的数学意义

    本文目录: •离轨策略:从失败与别人的经验中学习•重要度采样比:修正“理解”的偏差 离轨策略:从失败与别人的经验中学习 强化学习, 我们要学到的/收敛逼近的控制策略,一定是最优的。...且在实践,我们 很难不使用 离轨策略: •与环境的交互,我们尽量不要使用当前的最优策略 (同轨策略学习方式) ,因为这样我们会“谨小慎微”,不敢做出有创意的尝试;•之前的数据要被复用,之前的数据也是不同于当前策略的策略下产生的...我们可以看出:如果基于 p(x) 对 f(x) 进行采样,那最后得到的期望值应该是负值,因为 p(x) 总是倾向于 f(x) 左侧采样(图中的蓝线,左侧很高)。...但是,我们目前只能基于 q(x) 采样得到数据, q(x) 总是倾向于 f(x) 右侧采样(图中的绿线,右侧很高)。这就导致了采样到的 f(x) 数据都是正的。...后记:这篇文章原本的标题是如何理解强化学习『离轨策略的采样率』?让我们做一个简单的推导,但后来成文时我灵光乍现: 离轨策略是从非最优中学习最优策略,这不正是从失败中学习成功经验嘛!

    92160

    OD常用断点 ^_^ 很全很全

    win9x 与 win2k进行破解,以上中断有部分已经不能用了? 不知道win2k上,以上常用中断函数是什么了?...可以分为三种情况: 1.比较可能在注册表 2.比较特殊文件(*.key *.ini *.dat等) 3.比较程序,没有任何错误提示或者反译也找不到明显字符(这个就是我想问的) 还有一个是最难的...小球[CCG] 那要看是在哪作的标记,通常是注册表留下信息!...softice中就要用bpx regqueryvalueexa do “d esp->8″来中断看看, trw要用bpx regqueryvalueexa do “d*(esp+8)”来中断看看...oleauto32.dll是个通用的proxy/stub DLL,其每个函数的原型定义,并在MSDN中有详细描述。这也有助于理解VB DLL的函数的作用。

    1.1K30
    领券