sicp每日一题[2.18]

Exercise 2.18

Define a procedure reverse that takes a list as argument and returns a list of the same elements in reverse order:

(reverse (list 1 4 9 16 25))
(25 16 9 4 1)

可能是因为前两天发高烧脑子不好使,看到这道题我才忽然反应过来,这一节不就是在实现“链表”这个数据结构吗?乍一看,这道题利用 length 和 list-ref 很容易实现,但是我想了半天也没有做出来。最后想到了每次读取列表中的第一个元素,构造一个新的列表,不过也没有实现出来,还是上网查了资料,才明白怎么做。

(define (reverse items) 
  (define (iter items result) 
    (if (null? items) 
        result 
        (iter (cdr items) (cons (car items) result)))) 
  
  (iter items nil)) 
  
  
(reverse (list 1 4 9 16 25))

; 执行结果
'(25 16 9 4 1)

; 如果 nil 没有定义的话,可以用下面的语句自己定义
(define nil '())
posted @   再思即可  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示