我在函数式编程中做了一篇关于python vs lisp的论文。我在Common Lisp中看到了打字系统。我读过它是动态的,词汇的,强大的。但是我的教授说这是静态的……可以……
根据Luca Cardelli和Peter Wegner关于类型的开创性论文:关于理解类型,数据抽象和多态性,ACM Computing Surveys,17(4):471-522,1985,
可以通过静态程序分析确定每个表达式的类型的编程语言被称为静态类型。
Common Lisp不是这样。例如,考虑以下合法的函数定义:
(defun f(g x) (funcall 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 。
float
所以,我认为我们可以说Common Lisp不是通常意图的静态类型语言,而是它 能够 如果提供适当的类型信息,则可以选择使用。