clojure - Clojure(或任何其他 Lisp)中 + 函数的类型是什么?

标签 clojure lisp

我知道 Lisp(通常)是动态类型的,但我猜它们的值仍然有类型。函数是 lisp 中的值,所以我想知道函数 + 的类型是什么?

List of numbers -> number 似乎最有可能,所以我尝试了 (+ '(2 3))(+ [2 3]) 在 Clojure 中,但均无效。

是否可以在 Clojure REPL 中查询值(或表达式)的类型?

最佳答案

它实际上是一个非常复杂的类型,由于多种原因很难正式定义:

  • 这是一个多元函数(接受可变数量的参数)。请注意,这与采用单个参数(即数字列表)的函数不同。如果你想在数字列表上使用 +,你需要使用 apply 例如(申请 + [1 2 3 4])
  • 每个参数可以是任何类型的数字。有许多可能的数字类型,实际上是任何扩展 java.lang.Number 的数字类型。基类就足够了。
  • 内联版本被定义为可以直接生成原始类型作为结果。

没有一种简单的方法可以从 REPL 中确定这一点。但您可能对 Typed Clojure 感兴趣它提供了一个类型系统以及在 Clojure 中定义类型和进行相应类型检查的方法。它使用一种称为“渐进类型”的巧妙方法,因此您可以在需要的地方添加类型注释:您不需要立即为整个程序分配类型。

关于clojure - Clojure(或任何其他 Lisp)中 + 函数的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14039512/

相关文章:

macros - 拥有宏真的需要谐音吗?

clojure - 找到一个已经实现的LazySeq的元素

lisp - Lisp 中的接口(interface)

vim - MacVim:slimv 无法启动

clojure - 如何在 Clojure 中搜索特殊字符?

clojure - 将 clojurescript 的 re-graph graphql 客户端连接到 lacinia-pedestal graphql 服务器

Clojure - 将函数应用于向量的向量

lisp - 如何使用 ltk 显示图像?

LISP 查找和替换

lisp - 如何使这个邻居功能?