如何在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中使用递归绘制直角三角形? 的相关文章

  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • Lisp 中的十进制到二进制 - 制作非嵌套列表

    当达到我的递归情况时 我使用list将未来结果附加到当前结果 但由于递归 我最终得到一个嵌套列表 当我有一个导致递归超过五次的数字时 这会导致错误 任何想法如何我可以在一个简单的非嵌套列表中获得结果 例如 CL 用户 100 8 gt BI
  • 变量的多个值介于 0 和数字序言之间

    所以我一直在尝试自学序言 我认为我进展顺利 然而 我有点坚持我正在尝试的这一种方法 toN N A A 等于 0 到 N 1 之间的整数值 按升序生成 所以 toN 5 A 将是 A 0 A 1 A 2 A 3 A 4 我对序言还很陌生 所
  • 递归与迭代算法

    我正在实现欧几里德算法来查找两个整数的 GCD 最大公约数 给出了两个示例实现 递归和迭代 http en wikipedia org wiki Euclidean algorithm Implementations http en wik
  • 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
  • MongoDB 中递归文档的结构和查询语法?

    我最近开始在工作项目中研究 MongoDB 我对 JSON 和 MongoDB 的查询结构相当陌生 所以我希望你们中的一位能够提供一些说明 我已将这个问题翻译成 Excel 术语 因为它很常见并且很好地代表了我的问题 如果我尝试将 Exce
  • 我应该如何在序言中设计这个谓词?

    我必须写一个谓词stepup L Z X where L是一个列表并且Z and X是整数 它应该返回true if the Z可以步入X使用列表中用户给出的合法步骤 例如 stepup 7 12 19 6 32 应该返回true sinc
  • 一种递归算法,用于在数组中查找总和为给定整数的两个整数

    我需要一个算法来确定数组是否包含两个总和为给定整数的元素 数组已排序 该算法应该是递归的并且运行时间为 O n 递归步骤应该基于总和 这意味着该方法传递总和并根据最终结果返回 true 或 false 如果找到两个元素 返回 true 否则
  • 如何使用append/3在prolog中递归构建列表?

    我需要了解一些事实的价值 这部分似乎正在发挥作用 fact1 A Val1 fact2 B Val2 A B 但是一旦我尝试附加这些值 Val1 Val2 通过使用append 3谓词到列表 OutList 我只得到一个可能的解决方案 而不
  • 多维数组、Vuex 和变异

    我正在尝试添加和删除存储在 Vuex 中的多维数组中的项目 数组是一组类别 每个类别又有一个子类别 无穷大 不是简单的二维数组 示例数据集是这样的 id 123 name technology parent id null children
  • json 获取 prolog 谓词

    我试图在序言中创建这个谓词 谓词json get 3可以定义为 json get JSON obj Fields Result 这是正确的 当Result可以通过以下方式恢复 中的字段链Fields 列表 从JSON obj 一个字段 代表
  • 将人员分配到床位 - 自动化方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我每年都会帮助举办青年营 将与会者分配到卧室是一项艰巨的任务 有 92 个卧室 活动持续一周 与会者停留的时间长短不一 而且床需要重复
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 获取嵌套数组 JS 中对象的所有父对象

    我在使用 vuejs 的项目上遇到问题 我有一个像这样的嵌套对象数组 Data data id 1 parent id null title First folder children id 3 parent id 1 title Firs
  • 求 3D 棋盘中水体积的技巧

    所以我有一个任务 我必须重新创建一个 3D 棋盘 它是一个 RxC 方块网格 每个方块的高度都不同 如果棋盘是不透水的 有人把水倒在棋盘上 直到棋盘无法容纳更多的水 那么它就会容纳固定数量的水 如果板已经容纳了最大体积的水 则倒入板上的任何
  • prolog跟踪如何使用

    跟踪prolog程序时如何进行第二步 例如 我想跟踪以下简单程序 length1 0 length1 X Xs N length1 Xs N1 N is N1 1 我跟踪程序 trace length 1 2 3 N Call 7 leng
  • Java 中旅行商问题的暴力算法

    我正在学校的数学课上做一个项目 我选择做旅行商问题 这是我一直想进行更多研究的问题 但是 我的暴力求解算法遇到了问题 请前往底部更新查看最新版本代码 如果您知道旅行推销员问题是什么 请跳过本段 尽可能概括地说 TSP 是这样的 您是一名推销
  • 替换 prolog 中的部分表达式

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

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah

随机推荐

  • 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