list - 返回没有最后一个元素的列表

标签 list functional-programming scheme lisp racket

我刚开始学习 Racket 。

我有这个代码:

#lang racket

(define l1 '(1 2 3 4))
(car l1)
(cdr l1)

(car l1)返回 1。
(cdr l1)返回 '​​(2 3 4)

有没有返回'(1 2 3)的函数?

我已经试过了:

#lang racket

(define l1 '(1 2 3 4))
(map
 (lambda (l i)
   (if (not (= i (sub1 (length l1)))) l '()))
 l1 (range 0 (length l1)))

但是,它返回:'(1 2 3 ())

我也试过:

#lang racket

(define l1 '(1 2 3 4))
(map
 (lambda (l i)
   (cond ((not (= i (sub1 (length l1)))) l )))
 l1 (range 0 (length l1)))

但是,它返回:'(1 2 3 #<void>)

最佳答案

map 函数总是返回一个与其输入长度相同的列表。您想要一个比输入短的输出列表。您要查找的函数传统上称为 but-last:

(define (but-last xs) (reverse (cdr (reverse xs))))

关于list - 返回没有最后一个元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54887007/

相关文章:

java - 使用单一方法获取功能性 Java 流中的主要因素?

functional-programming - 方案参数不适用

lisp - 为什么 (apply and '(1 2 3)) doesn' t work while (and 1 2 3) works in R5RS?

scheme - Scheme 的尾递归。解码树

scala - 在Coalgebras上使用Tagless Final(对象代数)可以吗?

python - for循环没有从列表中删除所有项目,解决方案是什么?

python - 在列表理解中解包列表

list - 根据每个列表的第三个元素对 flutter 中的 2D 列表进行排序

Haskell - 查找未声明的变量

python-3.x - Python根据条件将列表转换为嵌套列表