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

尝试递归追加,我在Scheme中做错了什么?

在Scheme中,递归追加是指将两个列表进行合并,形成一个新的列表。如果你在Scheme中做错了什么,可能是以下几个方面:

  1. 语法错误:Scheme是一种函数式编程语言,它有自己的语法规则。你需要确保你的代码符合Scheme的语法要求,例如正确使用括号、引号等。
  2. 递归终止条件错误:在递归追加中,你需要定义递归的终止条件,否则递归将无限进行下去。你需要确保你的终止条件正确,并且能够在适当的时候停止递归。
  3. 递归调用错误:在递归追加中,你需要正确地调用自身来实现递归。你需要确保你的递归调用正确,并且传递正确的参数。
  4. 列表处理错误:在递归追加中,你需要正确地处理列表的元素。你需要确保你的代码能够正确地处理列表的头部和尾部,并且能够正确地进行追加操作。

以下是一个示例的递归追加函数的实现:

代码语言:txt
复制
(define (append-list lst1 lst2)
  (if (null? lst1)
      lst2
      (cons (car lst1) (append-list (cdr lst1) lst2))))

这个函数将两个列表lst1和lst2进行合并。如果lst1为空列表,则直接返回lst2;否则,将lst1的头部元素与递归调用append-list函数对lst1的尾部和lst2进行追加操作。

递归追加的优势在于它能够处理任意长度的列表,并且不需要额外的空间。它的应用场景包括但不限于:列表合并、列表扁平化、树的遍历等。

腾讯云提供了云计算相关的产品和服务,例如云服务器、云数据库、云存储等。你可以参考腾讯云的官方文档来了解更多关于这些产品的信息和使用方法。以下是腾讯云的官方网站链接:https://cloud.tencent.com/

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

相关·内容

逻辑式编程语言极简实现(使用C#) - 4. 代码实现(完结)

流(Stream)计算模式 老明在白板上写下“Stream”,说:“Stream最常见的用途是用来表示数量未知或者无穷的列表。在代码中怎么定义流呢?...为什么不是两个Stream呢? 前面已经分析过了,k.All(g1, g2)这个运算,是把g2蕴含的条件,追加到g1所包含的Stream中的每个替换里。 同时,g2是个函数。...正是因为Bind方法中需要有追加条件这个动作,所以Bind方法的第二个参数只能是既包含了条件内容,也包含了追加方法的Goal类型。...但是在NMiniKanren代码中并非所有条件都是这种形式。所以在追加条件时,需要先将条件转化为未知量 = 值的形式。 追加条件时,不是简单的使用Extend方法,而是用Unify方法。...俗话说得好,C#只是恰饭,真正的快乐还得看Scheme/Lisp。

28020
  • 八皇后问题

    通过使用生成器,所有递归调用都只需生成其负责部分的结果。下面的递归版的flatten就是这样做的,你可使用这种策略来遍历图结构和树结构。 ? 然而,在有些应用程序中,你不能马上得到答案。...你必须尝试多次,且在每个递归层级中都如此。打个现实生活中的比方吧,假设你要去参加一个很重要的会议。你不知道会议在哪里召开,但前面有两扇门,而会议室就在其中一扇门的后面。...应将这些皇后放在什么地方呢? 这是一个典型的回溯问题:在棋盘的第一行尝试为第一个皇后选择第一个位置,再在第二行尝试为第二个皇后选择一个位置,依此类推。...因此,只需在函数queens的前述实现中给if语句添加一个else子句。 你希望递归调用返回什么样的结果呢?你希望他返回当前行下面所有皇后的位置,对吧?...请注意,我在prettyprint中创建了一个简单的辅助函数。之所以将它放在prettyprint中,是因为我认为在其他地方用不到它。下面随机选择一个解,并将其打印出来,以确定它是正确的。 ?

    62410

    日拱一卒,伯克利CS61A,scheme解释器(五)尾递归优化

    完成scheme.py文件中的函数optimize_tail_calls,它会返回scheme_eval函数的替代品。...所有尾递归的调用scheme_eval时需要额外传入一个True作为第三个参数,你的目标是决定什么样的表达式计算能够使用尾递归优化。...答案 我估计如果是没有看过相关课程视频的同学看到这里会觉得云里雾里,不知道尾递归是什么。...在之后的递归执行过程当中,都不再需要它们了,那么它们也就没有继续存储的必要了。在递归调用之后,就可以释放了。 因此加上这个优化之后,可以将尾递归的空间复杂度进行减小,尾递归优化就指的这种。...唯一在调用的方式上有所不同,是以一种类似于map的方式调用的。 根据提示我们需要实现MacroProcedure类中的apply_macro方法。

    1.2K20

    一文学会「回溯搜索算法」解题技巧

    此处我们来认识 path 变量作为状态变量,它在深度优先遍历中的变化:往下走一层的时候,path 变量在尾部追加一个数字,而往回走的时候,需要撤销上一次的选择,这一操作也是在 path 的尾部去掉一个数字...下面我们解释如何编码: 1、首先这棵树除了叶子结点以外,每一个结点做的事情其实是一样的,即在已经选了一些数的前提下,需要在剩下还没有选择的数中按照顺序依次选择一个数,这显然是一个递归结构; 2、递归的终止条件是...下面我们对这一版代码做以下几个说明: 1、如果在每一个非叶子结点分支的尝试,我都创建新的变量表示状态,那么 在回到上一层结点的时候不需要“回溯”; 在递归终止的时候也不需要做拷贝。...总结 回溯算法就是在一个树形问题上做一次深度优先遍历,以达到搜索所有可能的解的效果。 为什么使用深度优先遍历?...这道题用广度优先遍历写是完全可以的,我尝试过,代码写出来非常不美观。 感兴趣的朋友也可以尝试写一下,尝试写广搜的目的是更好地体会为什么“深搜”能成为强大的“回溯搜索算法”,而广搜不是。

    1.2K10

    日拱一卒,伯克利CS61A,作业10,用Lisp开发宏

    作者 | 梁唐 出品 | 公众号:Coder梁(ID:Coder_LT) 大家好,日拱一卒,我是梁唐。 我们今天继续来肝伯克利CS61A这门公开课,这次我们一起来看的是作业10....原始文档:https://inst.eecs.berkeley.edu//~cs61a/sp18/hw/hw10/ 这次的作业一共有3题,难度不大,是scheme的拓展练习,主要让我们尝试使用scheme...提示:如果你在运行测试样例的过程中遇到递归深度越界的错误,这说明了你的实现不是一个合格的尾递归 开发完成之后进行测试: python3 ok -q accumulate-tail 答案 首先我们来看一下我们刚才的实现代码为什么不是尾递归...(accumulate-tail combiner (combiner (term n) start) (- n 1) term) ) ) Q3: List Comprehensions 在Python...中的list comprehension。

    68330

    各种编程语言对尾递归的支持

    尾递归   这篇文章,我们讲尾递归。在递归中,如果该函数的递归形式表现在函数返回的时候,则称之为尾递归。   ...异曲同工,的确也是一条路,不过我还是更加期望Python在未来支持尾递归优化吧。  ...  然后我们来看Scheme,按照Scheme的标准一向强行规定Scheme支持尾递归优化。   ...看来,至少参考了Scheme的尾递归优化。 Ruby   Ruby的作者松本行弘也是Lisp的粉丝,当然,我想大多数编程语言的作者都会是Lisp的粉丝,因为它会给人很多启发。   ...再深一步,我们会去想想,编译器/解释器此处该如何做,是否可以对现有的设计进行修改呢?或者,对该语言/工具的未来怀着什么样的期待呢?再或者,如果我们自己也设计一种编程语言,会如何设计这种编程语言呢?……

    2.7K20

    用H5页面打开APP

    业务场景,一个分享出去的h5界面通过页面内某个事件的触发,启动目标app并执行相关逻辑处理或做其他页面跳转(如:跳应用市场下载应用等)。...下面是我在企业开发过程中,实操的记录,对于有这块需求的朋友,可以来参考下。   Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据。...name=zhangsan&age=26">启动应用程序 Android处理: 在AndroidManifest.xml的MAIN Activity下追加以下内容(按照下面的格式来追加) 在MAIN的同级处加入过滤器,不然会导致应用图标在桌面消失等问题 --> <action android:name="android.intent.action.VIEW...name"); String age= uri.getQueryParameter("age"); } } 补充: 各个项目含义如下所示: scheme

    3K10

    2021年大数据Hadoop(八):HDFS的Shell命令行使用

    URI格式为scheme://authority/path。对于HDFS,该scheme是hdfs,对于本地FS,该scheme是file。scheme和authority是可选的。...hadoop fs -ls  URI 作用:类似于Linux的ls命令,显示文件列表 hadoop fs -ls  / -lsr 格式  :   hdfs  dfs -lsr URI 作用  : 在整个目录下递归执行...作用:   删除参数指定的文件和目录,参数可以有多个,删除目录需要加-r参数 如果指定-skipTrash选项,那么在回收站可用的情况下,该选项将跳过回收站而直接删除文件; 否则,在回收站可用时,在...HDFS Shell 中执行此命令,会将文件暂时放到回收站中。...作用: 追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入.

    3.1K30

    日拱一卒,伯克利CS61A大作业,scheme 解释器(四)

    解释器的功能,在这一篇文章中,我们用我们刚刚自己开发的解释器来做几个问题。...我们可以注意到,不仅scheme解释器本身是一个树递归的程序,并且它在处理其他递归问题上非常灵活。...但问题是,我们在递归的时候拿不到当前下标这个变量。所以进而可以想到,只有一个参数递归肯定是解决不了的,我们至少需要两个参数。 在不改动原有函数签名的情况下,唯一的办法就是使用高阶函数。...在函数内部再定义一个函数,然后我们再调用这个函数。 递归的逻辑其实不难,可以参考一下代码,就不过多赘述了。...因为scheme表达式是递归嵌套的,所以let-to-lambda也必须是递归的。 实际上,let-to-lambda的结构和scheme_eval函数是相似的,不过是用scheme语言实现的。

    1.1K40

    dirsearch安装和使用

    尝试`–suffixes ~`和`–prefixes .` -只想查找文件夹/目录?为什么不结合’–remove-extensions’和’–suffixes/`!...--deep-recursive 对每个目录深度执行递归扫描(例如: api/users -> api/) --force-recursive 每个找到的路径做递归蛮力,而不是只有路径以斜杠结尾...在递归过程中排除以下子目录扫描(用逗号分隔) -i CODES, --include-status=CODES 包括状态代码,以逗号分隔,支持范围...=SCHEME 默认方案(对于原始请求或如果没有URL中的方案) --max-rate=RATE 每秒最大请求数 --retries=RETRIES 重试失败请求的重试次数...README.md文件,是英文版的,我用翻译工具翻译整理的,有任何问题和错误的地方欢迎指正,谢谢。

    6.5K21

    开发中遇到的问题(一)

    问题2 模拟器运行没问题,直接运行真机也没问题,但是打包出来的显示就不对 开发新版本,打包给测试,结果测试说你这显示不对;然后我仔细看看,确实所有显示数字的地方都出错了,但是我在模拟器上运行没错啊,所有的数据都正常啊...然后我在想,会不会是因为我打包的时候少设置了什么?但是也没有排查出来,而且也没人告诉我需要特别设置的。 于是就需要定位错误,然后我上真机,直接运行,妹的,也没错啊,这是什么鬼。...然后求人问佛,想想,会不会是因为scheme的问题,因为如果说打包和直接运行有什么不同的话,那就是scheme了。于是我把scheme改为release直接运行,报错了。。。。。...然后我试了一下,丫的,果然,在浏览器里也打不开。然后换其他测试机,发现可以,可以,可以啊,原来测试都没看其他的手机啊。。。。...但是,不是我的问题,为什么我会改这么长时间啊?为什么呢?对啊,为什么呢?

    18220

    日拱一卒,伯克利太有创意了,用Python解释Python

    作者 | 梁唐 出品 | 公众号:Coder梁(ID:Coder_LT) 大家好,日拱一卒,我是梁唐。 我们继续伯克利CS61A公开课之旅,这一次我们做的是这门课的实验10。...算是为我们理解程序的编译过程打下一个简单的基础,之前做Scheme解释器项目吃力的同学可以先做一下这个,再回过头做Scheme,会更容易上手很多。原本的课程安排也是这个顺序。...在Project 4当中,你将会使用Python编写一个Scheme的解释器。我们这节课用的Python解释器中的绝大部分都是用C语言编写的。...和apply中交替递归evaluate表达式来获得一个只 Eval读入一个表达式并根据语言的规则evaluate结果。...(比如说和除法相关)尝试着看看会发生什么,这很坑爹不是吗?我们得到了一大串报错,并且退出了解释器。所以我们希望能够优雅地handle这种情况。

    67720

    源代码的寿命

    最糟糕的是我们有时会明明知道有些地方我们做错了,但是还是保持他长期运行。这些方法在当时我们认为是对的,只是现在看起来是错了。 我们代码的寿命?...想像一下当年写下的那一行行代码在今天又能有多大的改进余地。而且,在那些仍然遗留着类似技术债的代码库里,就算我们一直在孜孜不倦地偿还,也没见到老的代码新了多少。 我是怎么做的这项分析?...只要对整个仓库做一次git blame的递归,就能够列出针对分支中的每一行代码的commit号、提交人、提交时间。...不过,我也可以很容易地把时间往前推,比如把时间推到2015年的开始: 把时间往前推之后,重新递归运行一次git blame,通过比较每个月得出的结果,我就能知道有多少代码是在2015年之前写的。...年代愈发久远,原来的代码就越腐朽而越难以修改,根据上面的分析,你很容易明白为什么一个代码仓库能够存在将近十年之久,里面的代码为什么都是些老古董:每年的改动量少之又少,它们就是躺在那儿没人管,自始至终我们就只是在不断地往里面添加新的遗产

    1.3K10

    面经 | NLP算法岗(腾讯)

    部门选错了就直接凉了哦(手动微笑脸) 体验总结 a. 面试内容很全面,会涉及相关领域的前沿工作,并且会问的相当深入 b....多分类序列标注怎么做 如何构建想要的词表 指针与引用的区别 TransformerXL是什么?...使用分段RNN(segment-level recurrence mechanism)且存储上一次处理的片段信息;使用了相对位置编码方案(relative positional encoding scheme...ERNIE 怎么做的 把bert的单字mask改为词mask,直接对语义知识进行建模,增强了模型语义表示能力。...算法题: n分解成最少多少个平方数的和 n个串的最大公共前缀 树后序遍历非递归(要求空间时间复杂度,并不断改进) 作者:西柚媛 编辑:西柚媛 本文来自程序媛驿站,未经授权不得转载.

    48910

    Qt 通过自定义 URL Scheme 给已经运行的应用传参(Windows&macOS)

    在传统的应用程序设计中,我们可以看到很多通过浏览器唤起本地应用的案例,比如百度网盘、迅雷等工具,他们在浏览器访问一个非 http/https 协议开头的地址时,会自动打开其自己的应用程序并传递一定的参数...,告诉系统我们要注册一个自定义 URL Scheme,上面的例子中 MYSCHEME 是自己的 URL Scheme 名称 E:\\Documents\\Repositories\\temporary\...在选择打开应用后,程序自动启动,并且后面追加了命令行参数: ?...Windows 下对已启动应用传参 在 Windows 下我并没有找到像 macOS 一样方便的方式来实现这个功能,我的处理办法是,在第一个客户端启动时检测一下是否已经创建指定命名管道(Linux 下使用...{ // standard event processing return QObject::eventFilter(obj, event); } } 总结 在应用启动过程中动态传递参数在

    3.6K40

    在Xcode7中搭建python开发环境

    在Xcode7中搭建python开发环境 我使用的版本为Version 7.3 (7D175),关于基础配置部分,参考了Xcode6中搭建python开发环境的方法 环境搭建 1.找到电脑上安装Python...5.点击菜单的Product->Scheme->Edit Scheme ,这个scheme我理解就是新建项目的一些配置参数 ?...6.在Scheme的编辑对话框中,Run->Info->Executable,选择other后,预期后弹出个选择对话框;图中所示的python是我配置完的效果,默认是没有python选项的 ?...9.在Scheme的编辑对话框中,Run->Arguments->Arguments Passed On Launch,新建一个你即将新建的.py文件,例如AppMain.py;我理解的是加入到这里的文件才可以用...Xcode执行,这么个加法好麻烦呀,希望是我理解错了 ?

    86120

    怎样写解释器

    如果你用其它的 Scheme 实现的话,恐怕要自己做一些调整。 解释器是什么 首先我们来谈一下解释器是什么。说白了解释器跟计算器差不多。它们都接受一个“表达式”,输出一个 “结果”。...我们递归的调用 interp1 自己,分别得到 e1 和 e2 的值 v1 和 v2。它们应该是数字。 你注意到我们在什么地方使用了递归吗?...它非常简单,就是在环境中查找变量的值。这里的 (? symbol? x) 是一个特殊的模式,它使用 Scheme 函数 symbol?...由于在 Scheme 里面名字 '2 就是数字 2(我认为这是 Scheme 设计上的一个小错误),所以我们不需要对数字的名字做特殊的处理,把它们原封不动的返回。 [(? number?...其实用什么形式都无所谓,只要能存储 exp 和 env 的值。我比较喜欢使用 struct,因为它的界面简单清晰。 为什么需要保存当前的环境呢?

    1.6K70

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券