首页
学习
活动
专区
工具
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。

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

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

    1.1K20

    八皇后问题

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

    62010

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

    此处我们来认识 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。

    66930

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

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

    2.7K20

    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指定文件.也可以从命令行读取输入.

    2.9K30

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

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

    1K40

    开发遇到的问题(一)

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

    17720

    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文件,是英文版的,用翻译工具翻译整理的,有任何问题和错误的地方欢迎指正,谢谢。

    5.7K21

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

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

    66820

    源代码的寿命

    最糟糕的是我们有时会明明知道有些地方我们做错了,但是还是保持他长期运行。这些方法在当时我们认为是对的,只是现在看起来是错了。 我们代码的寿命?...想像一下当年写下的那一行行代码今天又能有多大的改进余地。而且,在那些仍然遗留着类似技术债的代码库里,就算我们一直孜孜不倦地偿还,也没见到老的代码新了多少。 是怎么的这项分析?...只要对整个仓库一次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个串的最大公共前缀 树后序遍历非递归(要求空间时间复杂度,并不断改进) 作者:西柚媛 编辑:西柚媛 本文来自程序媛驿站,未经授权不得转载.

    47810

    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.5K40

    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执行,这么个加法好麻烦呀,希望是理解错了 ?

    85120

    日拱一卒,伯克利教你用Lisp写递归,写完后感觉代码更溜了

    Scheme是Lisp语言的一个分支,老师课上没有解释为什么要引入Scheme的相关内容。...符号的行为很像是Python的字符串,但不完全一致。现在,你可以把一串有效的Scheme字符表示成一个symbol。 Scheme,除了表示False的#f之外所有的变量都会被当做True。...Control Structures 控制结构 if Expressions if 表达式 Scheme,if表达式是一个遵循以下规则的特殊形式。...我们可以使用car和cdr过程来分别获取pair的第一和第二个元素: 我们也可以嵌套cons来让一个pair的元素是另外一个pair 你可能会好奇,为什么第一个例子((1 . 2) . 3)的第一个点在第二个例子消失了...,我们每次判断lst第一个元素断言下是否为true,如果是的话,那么将它拼接到答案当中,如果不是,返回递归(cdr lst)的结果。

    65240
    领券