【问题标题】:declaring constraint/polymorphic types in Common Lisp在 Common Lisp 中声明约束/多态类型
【发布时间】:2020-02-17 22:14:55
【问题描述】:

在 Haskell(和 chicken scheme)中,您可以声明约束类型, 例如map :: (a -> b) -> [a] -> [b] 声明 map 将获取一个包含函数输入类型的列表,并返回一个包含函数输出的列表。 在常见的 lisp 函数声明中是否可能相同? 我可以做类似这样的事情吗:

(declaim (ftype (function (function (a) b)
                          (list a))
                (list b)
                map))

“你不能那样做”将是一个令人满意的答案:)

【问题讨论】:

  • 您能否使用listp 检查您的参数是否实际上是列表?
  • @BobJarvis-ReinstateMonica 嗯,不知道你的意思。我已经可以知道如何将输入和返回值声明为一个列表,我要做的是指定列表中的类型与函数一致。
  • 在来自 Lisp Cookbook 的 this page 中,在“类型检查”下它说“Common Lisp 通过宏 check-type 支持运行时类型检查。它接受一个位置和一个类型说明符作为参数如果 place 的内容不是给定类型,则发出类型错误信号”。也许这是一个起点。
  • 即使你可以声明它们,你会用它们做什么? Common Lisp 作为标准没有定义任何静态类型检查。人们需要寻找 Common Lisp 的扩展和/或特定的实现,这将提供静态类型检查。

标签: common-lisp static-typing


【解决方案1】:

不在单一类型声明中。我们没有类型变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2017-04-11
    • 2021-03-18
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多