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

偏好first和rest而不是car和cdr的lisps如何处理cdaddr这样的组合呢?

在偏好first和rest而不是car和cdr的Lisps中,处理cdaddr这样的组合可以通过以下方式进行:

  1. 首先,需要了解一些基本概念:
    • car:用于获取一个列表或一个cons单元的第一个元素。
    • cdr:用于获取一个列表或一个cons单元除第一个元素之外的剩余部分。
    • cons:用于创建一个包含两个元素的列表或cons单元。
  • 在偏好first和rest的Lisps中,可以使用compose函数或者连续的first和rest来处理cdaddr这样的组合。具体步骤如下:
    • 首先,使用cdr来移除第一个元素,并得到一个新的列表。
    • 然后,使用cdr再次移除列表的第一个元素,并得到一个新的列表。
    • 接着,使用car获取新列表的第一个元素。
    • 最后,使用car再次获取得到的元素的第一个元素。
    • 例如,在Common Lisp中,可以使用以下代码来处理cdaddr这样的组合:
    • 例如,在Common Lisp中,可以使用以下代码来处理cdaddr这样的组合:
  • cdaddr的应用场景可能相对较少,因为它涉及到多次连续的cdr操作,对于较大的列表而言可能效率较低。它的主要作用是获取一个列表中的第五个元素。
  • 在腾讯云中,相关的产品和服务可能包括:
    • 云函数(Serverless):一种无服务器计算产品,可用于处理特定的任务和函数,如对列表进行处理等。详情请参考云函数产品介绍
    • 云数据库Redis版:一种高性能键值对数据库,可以用于存储和处理列表等数据结构。详情请参考云数据库Redis版产品介绍

请注意,以上是给出的一个例子,实际应用中可能还需要结合具体场景和需求来选择合适的产品和解决方案。

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

相关·内容

日拱一卒,伯克利CS61A,居然有Lisp这样语言……

除了cons之外还有三个常用符号,分别是car,cdrnil。car用来返回pair中第一个元素,cdr用来返回pair中第二个元素,nil表示一个空list。...如果我们不这么干,就会显示成这样: 表示这不是一个规范list。 使用cons一个一个嵌套非常麻烦,所以Lisp中专门提供了一个操作符叫做list,用来直接创建list。...符号 问题来了,我们怎么在Lisp当中区分变量符号? 比如我们定义了两个变量: (define a 1) (define b 2) 假设我们想要单纯表示ab这带个字符,应该怎么办?...1 2 3 3 4 这是一个不下降list,下面这个不是: 1 2 3 3 2 也是简单递归,判断(car s)(cadr s)是否存在,如果存在判断(car s) > (cadr s),如果为真...所以只是保证list最后是nil是不够,list中间也可能存在list,这些list也要进行处理。 怎么处理?没有别的办法,只能使用递归。

97340

Scheme实现数字电路仿真(1)——组合电路

如果有向图没有环,则该组合电路没有反馈。   那么有没有有反馈电路?举一个例子如下:   ?   ...set-cdr!用于修改pair中所存储两个引用,以此实现各种复杂数据结构。我们使用set!似乎做到,比如可以这样写,   (define (my-set-car! v x) (set!...v (cons (car v) x)))   (define (my-set-cdr! v x) (set! v (cons x (cdr v))))   但是set-car!set-cdr!...实现颗粒可以更加细,上述my-set-car!my-set-cdr!需要重新构建序偶,会破坏数据结构。   然后,我们可以考虑如何表示电路数据结构了。   ...根本不需要计算下面非门输出信号,就可以知道最终信号是1。 ?   另外,还有信号重复计算问题,比如 ?   其中e可能面临着两次计算。   这些问题如何解决

1K20
  • Paul Graham:梦寐以求编程语言

    如果你让黑客像下面这样求和: add x to y giving z 不是写成: z=x+y 那么你就是在侮辱黑客智商,或者自己作孽了。 简洁性是静态类型语言力所不及之处。...如果你制造是编程语言这样高度组合系统,那就更是如此了。许多黑客会用你做梦也想不到方式改动你语法模型。...我有一种预感,最优秀那些大型程序就是这样发展起来不是像胡佛水坝那样从一开始就作为大型工程来设计。一下子从无到有做出一个大项目是一件很恐怖事。当人们接手一个巨型项目时,很容易被它搞得一蹶不振。...and rest instead of car and cdr, because it would make programs easier to read....But a hacker can learn quickly enough that car means the first element of a list and cdr means the rest

    92620

    Scheme实现数字电路仿真(2)——原语

    ,也可以考虑数list一起支持,那么我们在处理时候可能需要判断一下传入是数还是list,Scheme里提供了两个函数来判断,一个是list?...x (x 3))   (x)得到6   这样,每次x都是一个闭包,现在要看如何定义make-sum。   ...s) n (f-step step (step n (car s))))))   这样,make-sum可以由上述算子定义得 (define make-sum (lambda (n) (f-step...我们清楚辗转相除法这一步,应该描述如下 (define (step pair none) (cons (cdr pair) (remainder (car pair) (cdr pair))))   ...(z)),   之所以用z来表示,不是0/1,在于初始时候,我们认为都是一种浑沌状态,当然,也可以设为用0/1,这完全可以按仿真意愿来。

    70220

    SCIP学习笔记

    SCIP分五章:构造过程抽象,构造数据抽象,模块化、对象状态(涉及并发),源语言抽象,寄存器机器里计算(编译器如何工作) 环境 OS X下使用IDE DrRacket及其语法插件#PLaneT neil...) 以上是Scheme主要语法,可以容易优雅地生成语法树,没有语法糖。那么递归迭代怎么用?使用上面的语法规则即可。...构造数据抽象 闭包 (这里指不是匿名函数) 是在处理符合数据中一个关键思想:用于组合数据对象粘合剂,不但能用于组合基本数据对象,同样也可以用复合数据对象。...Wiki: 闭包是引用了自由变量函数 序对 用来粘合两个对象,用法: (define x (cons 1 2)) (car x) ; 1 (cdr x) ; 2 序对一种定义: (define...表操作: ; list[0] (car list) ; list[2:n] (cdr list) ; list[2] (car (cdr )) (cadr ) ; list

    1.6K40

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

    这个二元list当中每个元素是下标组合,如: 开发完成之后,进行测试: python3 ok -q 17 答案 lisp当中也有循环语法,如果使用循环会简单很多。...但老师讲课内容当中没包括循环,所以我们还是只能使用递归来进行处理。 如果要递归处理,必然会发现一个问题,就是enumerate函数入参只有一个list,输出要带上下标。...不过当时求是所有可能数量,并且面额限制也稍有区别,不是固定几种,而是给定了一个整数m,所有小于等于m面值都有,当时代码: def count_partitions(n, m): ""...这样可以简化解释器开发,我不太清楚这是否是Lisp语言设计逻辑一部分,但它的确惊艳到了我,这样设计思路实在是太巧妙了。...expr) 我们要处理核心关键,let语句有两个部分,一个是values一个是body。我们看一下let语句语法,它是先定义一些symbol映射,再定义symbol计算方式。

    1K40

    相互递归(2)

    于是以上就是一个对于f普通递归(f递归到f)。   从而,我们就知道了,任何递归都可以转化为到自身普通递归。   然而,对于lambda演算,因为自身没有名字,那又如何递归?   ...第三条则用于缩减最大公约数求解个数,之前我在文章《汉诺塔——各种编程范式解决》提到,递归可求解真谛在于缩小问题处理规模以达到降阶,以上第二、三条则是可以达到降阶效果。   ...(car s)) (apply gcd (cdr s)) (if (null? (cdr s)) (car s) (if (null?...(car s)) (apply f (cdr s)) (if (null? (cdr s)) (car s) (if (null?...那么这样Y存在吗?   幸运是,Y函数是存在,有个学名叫Y combinator,我们知道美国有个孵化器公司叫这个名字,实际上就是取这个意义。

    86410

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

    在这个例子当中,Scheme是evaluate了12值,Python只是打印。...我们可以使用carcdr过程来分别获取pair中第一第二个元素: 我们也可以嵌套cons来让一个pair中元素是另外一个pair 你可能会好奇,为什么第一个例子中((1 . 2) . 3)第一个点在第二个例子中消失了...为了更好理解,首先观察下面这个pair构造: 这被称为malformed list(畸形),因为它调用cdr得到不是一个well-formed list或者是nil,因为你依然可以看到点。...我们可以使用carcdr从这个list当中获取值,有些类似于Python链表中firstrest属性。...lst) nil (if (f (car lst)) (cons (car lst) (filter f (cdr lst))) (filter f (cdr lst))

    64540

    map实现柯里化(Currying)

    map一种实现   理解了map函数语义之后,我们自然从过程式思路明白了如何一个个构造结果list每个元素。...[9,8]、[2,3]处理依然是map做事情。...我们先来做这个抽象,我们希望这样用,(scan s f),带两个参数,一个是s是一个list,另一个是f,结果是一个s等长度list,它元素s元素一一对应,由函数f转换而来。   ...之前map类似,这个也一样可以分为三部分:   1.处理s第一个元素,为(f (car s))   2.scan递归s剩余部分,为(scan (cdr s) f)   3.把两者用cons拼接在一起...另外,实际上这里curry-map并不是对map柯里化,只是这样写更加整齐一些,其实也可以改变一下,真正得到map柯里化,这个只是一个小小改动。

    86320

    Extempore:实时系统实时编程语言

    在进一步介绍它之前,先看看 Andrew Sorensen 在 OSCON 2014 上演示吧: 是不是很酷 ^_^ ?...在处理 xtlang 时,先将代码编译成 LLVM 指令,再进一步交由 LLVM 编译链接。...可以被 Extempore 处理 Scheme xtlang 语言示例如下: (define scheme-closure (lambda (a b) (let ((result (...直接翻译成“人机编程”又显得很 low :编程不就是人和计算机之间交互吗?(我想这也是为什么作者不直接命名为 “man-machine”)最后我决定翻译为机体编程,有计算机人体混合含义。...↩ 副作用在 Lisp 中不是一个贬义词,而是求值附加效果。例如 Emacs Lisp 副作用常常是对文本缓冲区控制。 ↩

    2.2K20

    Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序” 1,表达式2,原子3,表(list) 4,点对(pair)5,向量(vector)6,变量7,

    ,它可以是单词,用括号括起来多个单词,也可以是无意义字母组合或符号组合,它在某种意义上可以理解为C中枚举类型。...上面这个复合表达式如果想引用它不是立即求值,就需要把它定义成符号: > '(+ 1 2) (+ 1 2) 这样,我们可以在后续需要时候将这个符号转换成普通表达式让它求值。...原子可以是一个字母排列,当然其中可以夹杂数字符号。除了表所有函数以外均是原子。 Scheme没有直接说原子这个概念,但Scheme作为Lisp方言,在形式上还是有原子这样东西。...所有的 Lisp/Scheme 表达式,要么是 1 这样数原子,要么是包在括号里,由零个或多个表达式所构成列表。所以可以这样说,List程序里面就是原子表。...(car_lst (car lst)) (cdr_lst (cdr lst))) (cond ((equal?

    1.5K20

    有限域(1)

    不是所有的环都可以扩展成一个域,有些环天生不足,比如刚才提到矩阵环,不仅仅因为矩阵乘法不可交换,而且里面充斥着两个非0元乘积等于0元情况。   比如 ?   ...这样元叫零因子,没有零因子环叫整环,比如整数环。当然整数环中有一个元素也很特殊,那就是1,1任何整数乘积还是那个整数本身,我们可以称呼环中满足这个性质元叫1元。   ...当然,对于我们有理数来说来说,这个周期是无穷。如果域特征不为无穷,而为整数,实际上是可以证明其只能为质数(Prime Number),这里不讲如何证明。   ...域也有子域概念,某个域其中一部分元在加法、乘法上还是一个域,则这一部分元所成域为原来域子域。用平常例子,我们有理数域其实是实数域子域,实数域则是复数域子域。...(car x) (cdr x) (addp p (car x) (cdr x)) (car x) (cdr x) (subp p (car

    46940

    Lisp语言简介_c++是什么语言

    这个比较小众编程到底是什么~ ————————————————————————— LISP(全名LISt Processor,即列表处理语言),由约翰·麦卡锡在1960年左右创造一种基于λ演算函数式编程语言...在Unix/Linux系统中,还有一种Emacs一起Emacs Lisp(Emacs正是用Lisp作为扩展语言进行功能扩展)非常流行,并建立了自己标准。...由于历史原因,Lisp长期以来被认为主要用于AI领域,但Lisp并不是为AI而设计,而是一种通用编程语言....car (car x) 要求 x 是一个表,它返回 x 中第一个元素,例如: > (car ‘(a b))a 基本操作符5 cdr (cdr x) 同样要求 x 是一个表,它返回x中除第一个元素之外所有元素组成表...如果能找到这样p表达式,相应“结果表达式e”值作为整个cond表达式返回值. > (cond ((eq ‘a ‘b) ‘first) ((atom ‘a) ‘second)) second 函数

    2.3K20

    JavaScript: 挑战函数式数据结构

    pair 函数名就是 cons,还有它两个操作 car cdr 也是这个名字,因此本文也都用这个名字。...但我们这里讨论是利用了数组去实现,有没有别的方法去实现这种数据结构?答案当然是有的啦,下文将会给出仅利用函数方式来实现这种数据结构,以及仅用函数去实现链表、二叉树。...(p q) p))) (define (cdr z) (z (lambda (p q) q))) 翻译成 TypeScript 就是这样: // 姑且把 Pair 这种数据结构类型定义为函数...function car(pair: Pair) { return pair((l, r) => l) } // 取出 pair 右值 function cdr(pair: Pair) {...挑战:函数式二叉树 上面的讨论已经实现了链表,链表里一个最特殊地方便是引用,如果引用变成两个,链表就可以推广成二叉树。

    76740

    Scheme来实现八皇后问题(2)

    还是先把Scheme代码编译、链接为普通可执行文件,这样运行就不是在解释条件下了,速度可以提升数倍。   ...那么有没有提升办法?   想要找到提升办法,我们先要分析之前算法慢原因。   ...,我们判断两个排列大小从最后一位开始看的话(也就是列表反过来看),在这里因为一路可以使用cons/car/cdr不是append/take/drop之类相对复杂递归,从而要方便很多,效率也要高,于是上述...比如要检测'(2 5 3 1)是不是合法,在检测前,我们无条件知道(cdr '(2 5 3 1))也就是'(5 3 1)是合法。   ...如果要求12皇后问题需要20秒。实际上,我们还可以在状态中引入一些别的东西以提高速度,从而使得运行时间变成现在几分之一,但这已经不是我想在这里讲了。

    74230
    领券