Prolog 中的递归乘法

2024-02-19

序言新手。

编辑:使用 swi-prolog

我想递归地执行乘法方法在序言中已经执行的操作,而不实际使用乘法方法。

我想要实现的算法看起来像:

    multn(N1, N2, output){
    if (n2 <=0) return output;
    else
        multn(N1, (N2-1), output + N1)
    }

例如:4*4 = 4+4+4+4 = 16

编辑*:仅为此算法传递正数。

我的知识数据库看起来像:

    multn(Num1, 0, Result) :- Result is 0.

    multn(Num1, Num2, Result) :- 
        NewNum2 = Num2 - 1, 
        multn(Num1, NewNum2, NewResult),
        Result is Num1 + NewResult.

但是,当我打电话时:

    ?- multn(2,2,R).

它会永远持续下去,为什么这不会在上述基本情况下停止?

非常感谢您的帮助。


对于整数算术,使用clpfd /questions/tagged/clpfd限制。所有严肃的 Prolog 系统都提供它们。例如,对于 SICStus Prolog,输入:- use_module(library(clpfd))在您的初始化文件中,以使 CLP(FD) 约束在您的所有程序中可用。

使用 CLP(FD) 约束和一些小的修改,您的初始程序将变为:



int_int_prod(_, 0, 0).
int_int_prod(Num1, Num2, Result) :- 
        NewNum2 #= Num2 - 1, 
        int_int_prod(Num1, NewNum2, NewResult),
        Result #= Num1 + NewResult.
  

现在的重点是:你显然意味着你的条款是相互的独家的.

Insert Num2 #> 0在适当的地方这样做!

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

Prolog 中的递归乘法 的相关文章

  • Prolog 中的迷你数独求解器中途停止

    我正在学习 七周七种语言 我只是想从书中找到一个例子 它解决迷你数独网格 4x4 作者使用的是 gprolog 但我使用的是 swi prolog 无论出于何种原因 我都无法让 gprolog 在我的虚拟机上工作 但 swi prolog
  • SWI-Prolog 中的约束编程

    我想要一个包含三个元素 A B 和 C 的列表 L 并具有以下约束 use module library clpfd L A B C L ins 1 3 A B C 但是 它给出了一个错误 Syntax error Operator exp
  • 井字游戏的极小极大

    我正在尝试用简单的极小极大算法来解决井字游戏 简单 但应该涵盖很多语言 到目前为止我所拥有的 该板表示为 9 个 未绑定 变量的数组 这些变量可以设置为x or o 获胜条件基本上是 win Player X1 X2 X3 X1 Playe
  • 为什么在具体化中将 clpfd 变量分配给实际值?

    我正在开发一个 SWI Prolog 程序 该程序使用 CLP FD 约束来找到特定问题的解决方案 为此 我碰巧需要两个列表的 未定位 重叠 那是 List La长度为A List Lb长度为 B A gt B 未定位的重叠列表是La Lb
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • 转换句子会产生无限循环 - 但如何转换呢?

    我不明白这是哪里出了问题 请注意 我对 Prolog 很陌生 我确信我错过了一些东西 只是不知道那可能是什么 有人可以帮我吗 谢谢 这是我的代码 printSentence printSentence W write W write nl
  • 列表中的连续元素

    我正在阻止一个谓词来编码Prolog 我需要对两个谓词进行编码 如果我打电话 u a b c d e f X 它会给X a b X b c X c d 如果我打电话 v a b c d e f X 它会给X a b X c d X e f
  • Prolog 过滤自定义目标失败的所有元素的列表

    我正在尝试写一个谓词filter List PredName Result 过滤一个List目标的所有要素PredName失败并随后返回Result列表 谓词PredName 1应该在调用过程时定义filter 3例如可以是 test N
  • 如何在 Prolog 中解决这个算术表达式难题?

    我有一个编程问题 https blog svpino com 2015 05 08 solution to problem 5 and some other thoughts about this type of questions htt
  • Same_length/2 更好的纯版本

    鉴于频繁的纯定义same length 2 as same length same length As Bs same length As Bs same length L L loops 是否有一个纯粹的定义不会在这种情况下循环 类似于纯
  • 谓词对于列表中的所有元素都必须为 true

    我有一组事实 likes john mary likes mary robert likes robert kate likes alan george likes alan mary likes george mary likes har
  • 通过递归扩展 Prolog 目标?

    我 最终 实现了一些目标 这些目标将根据开始由 开始之后 and duration 然而 计划目标仅接受规定数量的任务 我想扩展计划目标的功能以接受单个列表并在计划时迭代该列表 不幸的是 我认为这将需要与can run and 冲突目标如下
  • 一次性删除不正确的后续解决方案

    我有一个谓词 它找到正确的解决方案 但随后又找到不正确的解决方案 data D data threshold nonredundantbumps D 5 Bs write D 3 6 7 8 2 4 5 6 9 4 7 3 D 3 6 7
  • 如何验证涉及 diff/2 约束的交换性?

    围绕 diff 2 约束有很多炒作 特别是作为对 2 和 2 的某些非声明性的救援 这种非声明性通常被描述为非单调性 并给出了非交换性的例子 但是测试涉及 diff 2 的测试用例是否可交换的方法是什么 这是我想要做的元解释 我做了交换性测
  • Prolog:如何在不重复的情况下创建所有可能的组合

    我正在尝试创建一个谓词来查找所有可能的组合而不重复相同的数字 我尝试使用排列谓词 但它发现了重复的列表 例如 permutation 0 1 1 L L 0 1 1 L 0 1 1 L 1 0 1 L 1 1 0 L 1 0 1 L 1 1
  • Prolog:从哪里开始解决类似扫雷的难题?

    我需要在序言中写一些类似扫雷的东西 我能够用 正常 语言做到这一点 但是当我尝试用序言开始编码时 我完全不知道如何开始 我需要一些提示 输入规格 板尺寸 m n m n 1 16 三元组列表 i j k 在哪里i 1 m j 1 n k 1
  • 序言中的“如果”?

    有没有办法在序言中执行 if 操作 例如如果变量为 0 则执行一些操作 将文本写入终端 甚至不需要 else 但我找不到 if 的任何文档 是的 ISO Prolog 中有这样一个控制结构 称为 gt 你像这样使用它 condition g
  • 我应该如何在序言中设计这个谓词?

    我必须写一个谓词stepup L Z X where L是一个列表并且Z and X是整数 它应该返回true if the Z可以步入X使用列表中用户给出的合法步骤 例如 stepup 7 12 19 6 32 应该返回true sinc
  • WAM 中的扁平化形式

    WAM 教程重构指出查询 p Z h Z W f W 需要使用以下原则进行扁平化 话虽这么说 查询扁平化形式是 X3 h X2 X5 X4 f X5 X1 p X2 X3 X4 我对外部变量的定义感到困惑 请考虑以下内容 p Z h Y a
  • 简单的布尔表达式测试

    user compiling user for byte code formula 0 P Q P Q P user compiled 2 lines read 768 bytes written 37208 ms yes formula

随机推荐

  • 詹金斯:无法连接到存储库

    我正在尝试在 github 存储库上连接 jenkins 当我指定 Repo URL 时 jenkins 返回以下错误消息 无法连接到存储库 命令 git ls remote h 电子邮件受保护 cdn cgi l email protec
  • 从 JavaScript 正确调用 TypeScript 代码

    在我们的大型企业项目中 我们面临的情况似乎在互联网上的文章和帖子中没有得到很好的描述 我们需要将支持 SPA 的现有 JavaScript 基础设施代码与其他团队在 TypeScript 上开发的代码集成起来 由于许多政治限制和可用的开发资
  • 如何在 JSON 对象中添加 URL 字符串

    我需要添加通常采用 http somewebsite com somepage asp 格式的 URL 当我使用上面的 URL 创建一个字符串并将其添加到 JSON 对象 json 时 using json put url urlstrin
  • JPanel 不会完全伸展以占据可用空间

    我有一个面板 我在其中并排放置了几个具有不同尺寸和颜色的迷你面板 它们应该占据整个父面板 水平 为此 我使用 BorderLayout 用于父面板 并使用 BoxLayout 作为放置所有迷你面板的子面板 请参见下面的代码 它在调整大小和其
  • 阻止 chrome 在拖动链接时将光标更改为地球仪

    我有一个标准链接 例如 a href test Test a 在 Chrome 中 单击并拖动此链接将导致光标变为拖动地球仪的箭头 地球仪可以放在 URL 或书签栏上 我正在尝试用 JavaScript 实现拖放文件系统界面 所有文件和文件
  • 何时使用 $sanitize 和 $sce ?他们之间有什么区别?

    我试图了解属性之间的区别 请帮忙举出实际例子 何时使用它们 在这个论坛里找不到这样的问题 请帮帮我 sce是实际选择字符串是否可以安全使用以及是否应该对其进行清理的服务 如果是 HTML 则运行 sanitize如果有的话 你可能永远不需要
  • Perl 子例程参数

    我最近一直在阅读有关 Perl 的内容 并且对 Perl 如何处理传递给子例程的参数感到有点困惑 在 Python Java 或 PHP 等语言中 函数定义采用以下形式 伪代码 function myFunc arg1 arg2 Do so
  • 使用 Python 创建新的 Access 数据库和表

    我正在尝试用 Python 创建一个 Access 数据库并向其中添加两个新表 我正在使用 win32com 并已成功创建数据库 但无法创建表 我得到的只是无益的 Windows 错误 谁能帮我 下面的代码工作正常 dbname r C U
  • 如何在运行时获取过程或函数名称?

    有没有any返回函数或过程名称的方法在运行时 我目前正在错误处理这样的事情 Sub foo Const proc name as string foo On Error GoTo ErrHandler do stuff ExitSub Ex
  • WordPress 计数小部件

    您好 我想弄清楚如何获得在给定侧边栏位置发布的小部件的数量 例如 我有一个名为 UTILITY 的侧边栏 它是一个水平侧边栏 我希望这些小部件位置的宽度根据其中发布的小部件的数量进行均匀调整 我想知道在给定页面上此侧边栏中发布了多少个小部件
  • 别名使 emacs 在新缓冲区(不是框架)中打开文件并被激活/来到前面?

    到目前为止我所拥有的是 alias em open a Applications Emacs app osascript e tell application Emacs app to activate 但我很困惑 使用该代码 em fil
  • 在 Jar 中查找实现接口的类

    我想知道 jar 内的类是否实现了特定的接口 我已经实现了下面的代码 但它会迭代 jar 文件中的所有类 并在每个类上查找它是否实现了这个特定的接口 public static synchronized boolean findClasse
  • 表单action="/"是什么意思? [复制]

    这个问题在这里已经有答案了 表单的操作通常是指提交后运行的脚本 我看到一个代码form action 我无法找到它的去向 有人请给我解释一下 它转到基本目录的索引
  • NTLM授权WCF在ASP.NET Core中不起作用

    我遇到 NTLM 授权问题 我有一个在asp net上运行没有任何问题的服务 但现在我需要在asp net core上使用这个服务 但我无法通过授权 我这样配置绑定 var binding new BasicHttpBinding Basi
  • 使用 设置日期格式并将其显示在

    我想在 h outputText 中显示类似 2010 10 20 by Mary 的内容 日期值存储在 MBean 的名为 date1 的字段内 而用户名存储在 MBean 的名为 username 的字段内 我使用以下 EL 表达式和
  • C# 中 var 和 string 有什么区别? [复制]

    这个问题在这里已经有答案了 有什么区别var and string in C 关键词var用于隐式类型的声明 如果您使用变量的命名类型 那么除了可读性之外没有其他区别 并且对于哪种更好有不同的意见 例子 var s asdf 给出与以下完全
  • MCP23017 I2C 设备驱动程序探测函数未调用

    我正在使用以下 I2C GPIO设备驱动 https github com torvalds linux blob master drivers gpio gpio mcp23s08 c访问 MCP23017 GPIO 使用 insmod
  • 在 Sphinx 中的文件链接中使用版本号

    在 Sphinx 中 可以使用以下语法生成文件链接 name of file js
  • ImportError:动态模块未定义 init 函数 (initfizzbuzz)

    我尝试编译fizzbuzz c 以便通过 python 导入它 用于建筑fizzbuzz c I used python setup py build ext i 构建后 我尝试导入fizzbuzz c但出现了下面的错误 我怎么解决这个问题
  • Prolog 中的递归乘法

    序言新手 编辑 使用 swi prolog 我想递归地执行乘法方法在序言中已经执行的操作 而不实际使用乘法方法 我想要实现的算法看起来像 multn N1 N2 output if n2 lt 0 return output else mu