如何在prolog中使用递归绘制直角三角形?

2024-01-22

我得到这个直角三角形的答案,如下所示:

shape:- shape(0, 6).

shape(S, A) :- S < A, 
              count(0, S), 
              S1 is S+1, 
              shape(S1, A).

shape(S, X) :- S >= X.


count(A, B) :- A =< B, 
              write('*'), 
              A1 is A+1, 
              count(A1,B).

count(A, B) :- A > B, nl.

   *
   **
   ***
   ****
   *****
   ******

我应该修改什么来打印这种类型的直角三角形?

         *
        **
       ***
      ****
     *****
    ******

shape(S, _) :- S =< 0.
shape(S, N) :- S > 0, 
              S1 is S-1, 
              count(0, S1, N), 
              shape(S1, N).

count(A, _, N) :- A >= N, nl.
count(A, B, N) :- A < N, 
    (   A >= B
    ->  write('*')
    ;   write('.')
    ),
    A1 is A+1, 
    count(A1,B, N).

?- shape(6, 6).
.....*
....**
...***
..****
.*****
******
true ;
false.

我在打印空间时遇到问题。 SWI prolog 似乎有一个错误:它要么不打印任何内容,要么' '。所以也许这段代码与您的序言解释器一起运行write(' ')代替write('.').

该代码与您的非常相似。主要区别在于计数有 3 个参数:迭代器A, 字符边界数B以及写入的总字符数 (N)。迭代器A必须小于或等于N。视情况而定A >= B它要么打印'*' or '.'。另外,我必须倒数地写它,否则树就会颠倒/从左到右。

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

如何在prolog中使用递归绘制直角三角形? 的相关文章

  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 使用fold_left/right反转OCaml中的列表

    更新 解决方案 感谢 jacobm 的帮助 我想出了一个解决方案 Folding Recursion let reverse list 3 theList List fold left fun element recursive call
  • 谓词对于列表中的所有元素都必须为 true

    我有一组事实 likes john mary likes mary robert likes robert kate likes alan george likes alan mary likes george mary likes har
  • 来自 JSON 的 Angular 8 动态表单

    我正在尝试从 JSON 模式递归生成动态表单 但我正在努力解决找不到表单控件的问题 这是代码示例 我收到这个错误 错误错误 找不到名称为 createdAt 的控件 我尝试了不同的方法 但仍然存在问题 我知道我错过了一些东西 所以请帮忙 任
  • 仅使用堆区域的递归

    是否有仅使用堆区域的递归示例 在 C 中 基于函数调用的递归总是使用堆栈 几乎按照定义 如果您愿意将递归转换为迭代 那么可以仅使用堆空间 但这并不是真正的递归 您可以通过在堆中实现堆栈来实现这一点 某些问题可以使用尾递归 http en w
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • 函数式 Scala 中的选择排序

    我正在学习 Scala 编程 并编写了选择排序算法的快速实现 然而 由于我对函数式编程还不太了解 所以在转换为更 Scala 风格时遇到了困难 对于 Scala 程序员来说 如何使用 Lists 和 vals 来做到这一点 而不是回到我的命
  • Java 递归和性能

    递归对处理器和内存的影响是否很大 我的意思是 我的一个线程有一个方法 很可能会调用自身 假设它每秒可以自调用一次 我的应用程序应该运行至少 24 小时而不停止 因此它提供了 60 60 24 86400 个自调用方法 它对第二个 主 线程有
  • Prolog家谱

    我做到了 但没有显示答案 当我询问兄弟姐妹 叔叔 阿姨时 这是我写的 有什么问题吗 uncle X Y male X sibling X Z parent Z Y uncle X Y male X spouse X W sibling W
  • 使用 prolog 添加另外两次出现

    我有一个清单 a b a a a c c 我需要为每个元素添加两次以上的出现 最终结果应该是这样的 a a a b b b a a a a a c c c c 如果列表中有一个与下一个项目相同的项目 那么它会继续下去 直到出现一个新项目 当
  • 包装一个采用 std::function 的函数,以便传递采用更多参数的函数

    Problem 我有一个函数double subs std function
  • Python脚本递归重命名文件夹和子文件夹中的所有文件

    您好 我有许多不同的文件需要重命名为其他文件 我已经走到这一步了 但我想要拥有它 这样我就可以有许多要替换的项目及其相应的替换项 而不是逐一输入 运行代码然后再次重新输入 更新 另外 我需要重命名以仅更改文件的一部分而不是整个文件 因此如果
  • 如何让 Prolog 解释你的结果超出真实的陈述

    我有以下事实和规则 flight sea msp flight msp jfk route A B flight A B route B A flight A B route A C flight A B flight B C 当查询rou
  • 如何从 Unix 命令行递归解压目录及其子目录中的档案?

    The unzip命令没有递归解压缩档案的选项 如果我有以下目录结构和档案 Mother Loving zip Scurvy Sea Dogs zip Scurvy Cures Limes zip 我想将所有档案解压缩到与每个档案同名的目录
  • 有没有相互递归的例子?

    是否有递归函数调用另一个函数 该函数也调用第一个函数 的示例 例子 function1 do something function2 do something function2 do something function1 do some
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • 高阶“解决方案”谓词

    我正在使用一个更高阶的 Prolog 变体 它缺少findall 还有一个关于实现我们自己的问题findall here 获取 Prolog 中的解决方案列表 https stackoverflow com questions 419103
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411
  • 动态规划的复杂组合条件

    我正在探索动态规划设计方法如何与问题的底层组合属性相关 为此 我正在查看的规范实例硬币找零问题 Let S d 1 d 2 d m and n gt 0是请求的金额 我们可以用多少种方式相加n仅使用中的元素S 如果我们遵循一个动态规划如果要

随机推荐

  • AdapterView的onItemClickListener和OnItemSelectedListener的区别

    这两个听众有什么区别 文档说 OnItemSelectedListener 选择此视图中的项目时调用的回调的接口定义 OnItemClickListener 单击此 AdapterView 中的项目时调用的回调的接口定义 选择 点击在触摸屏
  • Android 谷歌日历授权问题

    我正在尝试制作一个使用 OAuth 访问用户的 Google 日历的应用程序 我已经准备好了获取所有正确令牌的代码 并将它们保存到某些首选项中 我使用了教程here http blog doityourselfandroid com 201
  • 如何使用 powershell 脚本控制窗口的“状态”(最大化、最小化、恢复)?

    我需要能够运行此脚本并使其最大化窗口 如果尚未最大化 如果不是 则恢复窗口 该窗口就是当前活动的窗口 因此无需获取具体信息 但如果您这样做 则可获得奖励积分 8O 我计划通过快捷键激活它 它确实需要在PS v1下运行 我知道 我知道 但我无
  • 无法读取 d3.force 实现中未定义的属性“权重”

    我已经被这个问题困扰了一段时间 甚至根据现有的答案也不知道该怎么做 我在统一响应的最后一个 JSON 条目上不断收到此错误 paperCount 1 PMIDs 20626970 authorA 79 authorB 80 paperCou
  • GraphQL:过滤数组中的数据

    我确信这是一件简单的事情 但我在 GraphQL 的文档或 Graphcool 的文档中找不到任何内容 假设我有一个具有此模式的实体 新的 GraphQL 用户 如果我在模式表示中犯了错误 抱歉 Book name String autho
  • netbeans php插件使用FTP上传文件时如何控制文件权限

    每当 netbeans 执行 ftp 上传时 都会使用设置为 640 的权限上传文件 这会导致 PHP 抛出以下错误 Warning Unknown failed to open stream Permission denied in Un
  • 在不禁用滚动功能的情况下防止 iOS 反弹

    我正在尝试实现一种解决方案 以防止当网页内容大于视口时 iOS 版 Safari 中出现 iOS 反弹效果 我正在处理的页面的结构非常具体 并且与此页面非常相似http new salt ch http new salt ch 基本结构是基
  • 根据文件大小和时间回滚日志

    我一直在尝试建立一个简单的 logback 项目来按日期和文件大小滚动我的日志文件 到目前为止我无法让我的附加程序滚动到另一个文件 相反 它写入由
  • 如何重置Codemirror编辑器?

    我想重置 Codemirror 编辑器的所有内容 理想情况下 这应该清除文本区域 删除所有标记并清除历史记录 实现这一目标的最佳方法是什么 cm setValue cm clearHistory cm clearGutter gutterI
  • 从父类访问属性时未定义的属性

    当类 B 是类 A 的子级并且应该使用 扩展 继承其属性时 我无法弄清楚如何使用类 B 访问类 A 的属性 基本上 我有 class A function construct this gt foo foo class B extends
  • 为什么 sum 的值会变成负数? [复制]

    这个问题在这里已经有答案了 我编写了以下 C 代码来查找给定数组的前 49 个数字的总和 但总和为负数 include
  • 覆盖 Laravel 容器中的 Singleton

    我想知道是否有一种简单的方法来覆盖 Laravel 框架核心中的单例服务集 例如我正在尝试使用以下提供程序重写 app name 命令服务 use Hexavel Console AppNameCommand use Illuminate
  • 如何返回类型列表中最大的类型?

    我将如何创建一个类模板来返回其类型sizeof比其他人都大 例如 typename largest
  • ORA-06530: 对未初始化复合的引用

    当我执行包时 我收到一条错误消息 emp test 中出现错误 ORA 06530 引用未初始化的组合 你能解释一下如何初始化包中的对象类型吗 CREATE OR REPLACE TYPE emp obj AS OBJECT emp no
  • 将一些 C# 通用代码重写为 F#

    我正在尝试重写这样的通用代码 C U Upcast
  • PHP - 使参考参数可选?

    假设我在 PHP 中定义了一个函数 最后一个参数是通过引用传递的 有什么办法可以让它成为可选的吗 我怎么知道它是否已设置 我从未在 PHP 中使用过引用传递 因此下面可能存在一个愚蠢的错误 但这里有一个示例 foo function bar
  • 如何为 C# Windows 服务配置 log4net

    我有一个 Windows 服务 其中 app config 文件和 log4net config 文件是分开的 日志记录不起作用 在我的 app config 文件中 我有以下部分
  • 如何使用mock的@patch来模拟在单独的Python模块中定义的函数

    我正在尝试使用模拟和 patch 装饰器为 Python 应用程序构建测试 给定以下目录结构 mypackage mymodule init py somefile py myothermodule tests init py test f
  • 在 OpenCV 中绘制梯度向量场

    我想计算灰度图像的梯度 平滑平面在代码中 并将其绘制为 OpenCV 中的矢量场 叠加到现有图像上 我尝试应用一对 Sobel 运算符 我也尝试过 Scharr 来计算沿 x 和 y 的两个导数 如 OpenCV 文档中所述 但当我尝试绘图
  • 如何在prolog中使用递归绘制直角三角形?

    我得到这个直角三角形的答案 如下所示 shape shape 0 6 shape S A S lt A count 0 S S1 is S 1 shape S1 A shape S X S gt X count A B A lt B wri