我被告知butlast返回列表中除最后一项之外的所有项目。 这是我手动输入时的输出图片:
输出应该是'(1 2),因为我们从列表中删除了最后一项。我在网上发现了一个关于butlast的文档,但我不确定为什么命令不适用于我: https://planet.racket-lang.org/package-source/cce/dracula.plt/6/0/planet-docs/manual/Lists.html#(def._((planet.dracula..scm.(cce._dracula..plt._6._0)._language)._butlast))
答案 0 :(得分:1)
您引用的文档属于ACL2编程语言,其中butlast
是定义良好的内置过程。
Racket没有名为butlast
的内置程序。您可以使用Racket的官方文档进行验证,该文档可在以下网址找到:https://docs.racket-lang.org/。这就是您在应用函数时收到错误butlast: undefined;
的原因,因为该过程既不是内置的也不是您定义的过程。
在Racket中,内置的drop-right
过程存在并且与butlast
的工作方式相同。例如:
(drop-right '(1 2 3) 1)
=> '(1 2)
(drop-right '(1 2 3) 2)
=> '(1)
您也可以按如下方式手动创建butlast
程序:
(define (butlast lst n)
(let ([len (length lst)])
(if (< len n)
"handle error"
(take lst (- len n)))))
例如:
(butlast '(1 2 3) 1)
=> '(1 2)
(butlast '(1 2 3) 2)
=> '(1)