我正在与一位同事讨论,他认为LISP是有效的,我认为不是。虽然我承认LISP程序可以在功能上编写,但LISP并非“纯粹”功能性(我认为Haskell的方式是这样)。
我不是一个lisp专家(事实上,我是一个lisp初学者)。有人可以向我提供一个lisp代码片段,这个代码片段无疑是我可以向他展示的功能吗?感谢。
答案 0 :(得分:3)
John MCcarthy于1958年撰写的原始LISP纯粹是功能性的。副作用根本不在论文中,因为它没有read
,print
或set
,它确实是一种纯函数式语言。虽然因为他们需要一些加载程序的方法,读取结果和define
作为setq
但你可以在同一个表单中定义多个函数,但是当他们编写解释器时会发生变化。
与ALGOL language family(由我们所知的几乎所有编程语言组成)一样,LISP现在也是family of different languages。一些LISP语言是功能性的,但大多数是多范式的。有些像Playstation上用来制作Crash Bandicoot的那些动态很少,并且有像堆栈/寄存器这样的绑定,实际上更像是带有LISP语法的汇编/静态语言。它绝对没有用。
问题中有LISP,我猜你的意思是Common Lisp
,它肯定不是功能性的,而是一种多范式语言,因为它不能保证TCO,你需要使用loop
你在Scheme
中会使用尾递归。许多常见的人认为函数是有效的,只要它所做的突变不会泄漏,但从这个角度来看,C ++也可以具有函数功能。
使用它的共享命名空间的方案可以做很高比例的功能代码,它可以通过赋予它不同的功能来完成具有副作用的功能。我想如果你愿意,它可以接近Haskell。
副作用是一种真正的语言杀手,但没有它,你的程序就无法真正做任何有用的事情。