首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scheme中编写flatten方法

在Scheme中编写flatten方法
EN

Stack Overflow用户
提问于 2011-12-05 23:22:24
回答 3查看 12K关注 0票数 4

我一直在使用下面的函数flatten,到目前为止,它只适用于lists。我想知道是否有人可以给我一些关于如何让它与pairs一起工作的见解?例如,(flatten '(a .a))将返回(a a)。谢谢。

代码语言:javascript
复制
(define (flatten list)
   (cond ((null? list) null)
         ((list? (car list)) (append (flatten (car list)) (flatten (cdr list))))
         (else
          (cons (car list) (flatten (cdr list))))))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-05 23:26:49

这里有一个选择:

代码语言:javascript
复制
(define (flatten x)
  (cond ((null? x) '())
        ((pair? x) (append (flatten (car x)) (flatten (cdr x))))
        (else (list x))))
票数 8
EN

Stack Overflow用户

发布于 2019-11-18 20:08:31

这做了你想要的,不需要追加,使它成为o(n)。我以树的形式遍历列表。如果列表嵌套得太深,一些方案可能会抛出堆栈溢出错误。在guile中,情况并非如此。

我不主张这段代码的版权。

代码语言:javascript
复制
(define (flatten lst)
  (let loop ((lst lst) (acc '()))
    (cond
     ((null? lst) acc)
     ((pair? lst) (loop (car lst) (loop (cdr lst) acc)))
     (else (cons lst acc)))))
票数 3
EN

Stack Overflow用户

发布于 2011-12-28 13:06:59

代码语言:javascript
复制
(define (flatten l)
  (cond
    [(empty? l) empty]
    [(list? l)
     (append (flatten (first l))
             (flatten (rest l)))]
    [else (list l)]))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8387583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档