如何从列表中删除第一个元素?

3 scheme list

如何从Scheme中删除列表中的第一个元素?

假设我有以下列表

'((apple bob car) (cat dig) (e)))
Run Code Online (Sandbox Code Playgroud)

我怎么才能摆脱apple并独自离开呢?

And*_*ker 9

Scheme中的三个基本列表操作是

  • cdr,这意味着'休息'或'给我列表,没有第一项'
  • car,这意味着'第一'或'给我列表中的第一项'
  • cons,这意味着追加清单

假设s是列表((苹果鲍勃车)(猫挖)(e))

中间步骤

(car s)       ; (apple bob car)
(cdr (car s)) ; (bob car)
(cdr s)       ; ((cat dig) (e))
Run Code Online (Sandbox Code Playgroud)

最后的表达

(cons (cdr (car s))) (cdr s))
Run Code Online (Sandbox Code Playgroud)

结果

((bob car) (cat dig) (e))
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 5

首先,要认识到你的问题有点不一致.如果你想删除列表中的第一个元素,你将被留下

((cat dig) (e))
Run Code Online (Sandbox Code Playgroud)

因为列表中的第一个元素是(apple bob car).

如果你试图摆脱正义apple,那么如果列表的头部(汽车)本身就是一个列表,你想用它的cdr替换它.我假设您希望无论列表的深度如何都能工作,因此您需要使用该方法进行递归(与其他答案不同).

因此,如果第一个项目是列表,那么您需要从列表中删除第一个项目,并递归地将其添加到列表的其余部分.这似乎有效:

(define removeFirst
  (lambda (input)
    (cond
      ((list? (car input)) (cons (removeFirst (car input)) (cdr input)))
      (else (cdr input))
    )
  )
)

> (removeFirst '((apple bob car) (cat dig) (e)))
((bob car) (cat dig) (e))
Run Code Online (Sandbox Code Playgroud)