【发布时间】:2023-04-02 05:20:01
【问题描述】:
我刚刚开始学习球拍。
我有这个代码:
#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>)
【问题讨论】:
-
你可以使用
reverse吗? -
@WillNess 是的,我想是的。但我想让它移植到 Scheme(如果可能的话)。
-
试试吧。 :) 你能得到 reversed “butlast” 元素吗? (这就是你想要的函数在普通的 lisp 中被称为,顺便说一句 - “butlast”)。
-
我正在尝试做类似
(filter not empty? (map (lambda (l i) ...的事情,但它不起作用。而且,我正在尝试使用递归而不使用map。 -
但是如果你刚开始学习 Lisp,那么自己用直接递归来编写代码是一个很好的练习,即使用 if, null?缺点,汽车,cdr 和递归,来感受一下。你应该首先喜欢自己编写这样的小函数,然后厌倦自己编写它们,然后转而使用库函数。
标签: list functional-programming scheme lisp racket