Common Lisp是静态类型还是动态类型?如果两者都如何完成?

时间:2018-11-22 06:51:16

标签: dynamic types static lisp common-lisp

我正在写有关函数式编程中python vs lisp的论文。我在Common Lisp中看到打字系统。我已经读到它是动态的,词汇丰富的,强大的。但是我的教授说这是静态的...任何人都可以帮我清除这个吗?太疯狂了!

1 个答案:

答案 0 :(得分:7)

根据Luca Cardelli和Peter Wegner撰写的关于类型的开创性论文:关于理解类型,数据抽象和多态性,ACM Computing Surveys,17(4):471-522,1985,

  

可以通过静态程序分析确定每个表达式的类型的编程语言被称为静态类型。

对于Common Lisp,情况并非如此。例如,考虑以下合法的函数定义:

(defun f(g x)
  (funcall g x))

函数主体内的表达式(funcall g x)的类型不能以任何方式静态地推断或确定。

但是,在Common Lisp中,您可以根据需要指定函数参数的类型。例如:

(defun f (g x)
  (declare (type integer x)
           (type (function (integer) float) g))
  (funcall g x))

,在这种情况下,编译器可以推断(funcall g x)的类型为float

因此,我想我们可以说Common Lisp不是通常所期望的静态类型语言,但是,如果人们提供适当的类型信息,它可以选择性地使用