首页 > 解决方案 > 将列表列表变成一个列表函数式编程(球拍,方案)

问题描述

我需要这个列表:((1 2) (3 4) (5))要像这个列表(1 2 3 4 5),但我想使用cons, car, cdr. 我不确定如何进行此操作,因为我不知道如何在列表列表中移动并添加每个子列表的值,而不是将子列表添加为元素。我只是无法将我的大脑包裹在它周围

我和另一个人一起工作并得到了这个:

(define append 
  (lambda (lst1 lst2)
    (if (null? lst1)  lst2 
      (if (null? lst2)  lst1
        (cons (car lst1)
              (append (cdr lst1) lst2))))))

(define concate
  (lambda (lst) 
    (if (null? (cdr (cdr lst)))
      (append (car lst) (car (cdr lst)))
      (concate 
        (cons (append (car lst) (car (cdr lst))) 
              (cdr (cdr lst)))))))

如果我定义一个列表((1 2) (3 4) (5)),它将返回并运行concate它会给我(1 2 3 4 5)我想要的。这将适用于只有三个元素的列表。

我不需要做超过三个元素,但我很想知道这是否可能。

我一直在互联网上搜索 Racket 和 Scheme 代码以获取示例,但我正在运行的解释器似乎更接近于旧的东西,可能是 LISP。不知道,希望高人指点。

标签: listfunctional-programmingappendconcatenationracket

解决方案


推荐阅读