我正在写一篇关于函数式编程中 python vs lisp 的论文。我在 Common Lisp 中看到了打字系统。我读过它是动态的、词汇的、强大的。但是我的教授说它是静态的……谁能帮我解决这个问题?太让人抓狂了!
1 回答
9
根据 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 不是通常预期的静态类型语言,但如果提供适当的类型信息,它可以选择性地使用。
于 2018-11-22T10:18:44.147 回答