list - 将列表列表变成一个列表函数式编程(球拍,方案)
问题描述
我需要这个列表:((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。不知道,希望高人指点。
解决方案
推荐阅读
- vb.net - 检索已上传文档的 ID
- laravel - Laravel 登录表单路径
- python - 每次向数组添加按下的键并在每次数组为 50 时清除
- php - 第 164 行的 engine/Library/Enlight/Hook/ProxyFactory.php 中不存在类 Shopware_Controllers_Backend_MytestPaymentServices
- python - 我无法为用户显示书签(django)
- pandas - 根据给定的排序顺序列表对熊猫数据名进行排序
- java - 文件选择器运行时异常
- java - 实现具有未知类型的通用 Java 接口作为返回类型
- javascript - Dropzonejs取消不起作用
- functional-programming - solidity 中的纯修饰符和视图修饰符有什么区别?