为什么DrRacket不承认Butlast?

时间:2017-05-22 04:16:43

标签: list racket

我被告知butlast返回列表中除最后一项之外的所有项目。 这是我手动输入时的输出图片:

enter image description here

输出应该是'(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))

1 个答案:

答案 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)