Sid*_*oor 2 lisp static types dynamic common-lisp
我在函数式编程中做了一篇关于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))
Run Code Online (Sandbox Code Playgroud)
(funcall g x)无法以任何方式静态推断或确定函数体内的表达式类型.
但是,在Common Lisp中,如果需要,可以指定函数的参数类型.例如:
(defun f (g x)
(declare (type integer x)
(type (function (integer) float) g))
(funcall g x))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器可以推断出类型(funcall g x)是float.
因此,我认为我们可以说Common Lisp不是通常所预期的静态类型语言,但如果提供适当的类型信息,它可以选择性地使用.