我知道Lisp和Haskell分别是逻辑和函数编程语言,但这到底意味着什么?它们与其他语言有何不同?我听说学习这些将使您成为一个更好的程序员并改善您的逻辑。这是真的,如果我学习Lisp或Haskell达到了能干的水平,我的编程会得到改善,并且我会更好地处理任何语言的问题吗?我只是想知道看看它们是否值得学习。这些语言在GUI和图形等领域是否有用,还是仅对控制台应用程序有用?
我知道Lisp和Haskell分别是逻辑和函数编程语言,但这到底意味着什么?它们与其他语言有何不同?我听说学习这些将使您成为一个更好的程序员并改善您的逻辑。这是真的,如果我学习Lisp或Haskell达到了能干的水平,我的编程会得到改善,并且我会更好地处理任何语言的问题吗?我只是想知道看看它们是否值得学习。这些语言在GUI和图形等领域是否有用,还是仅对控制台应用程序有用?
Answers:
就像学习数学会提高您的分析能力,学习拉丁文/经典文学会提高您的写作技巧一样。
设计这些语言的人认真思考了编写程序的含义。这些语言是这些研究的结果。
也就是说,学习Java也将使您成为更好的程序员。学习C。真正的好处来自学习不同哲学的语言。然后,您可以对程序编写方式有自己的看法。
编辑
我意识到这个答案对尚未学习过Haskell和/或Lisp的人没有太大帮助。这里有一些例子可以进一步解释我的意思
Lisp认为语法应该最小化,并且所有内容都应该是列表或原语(Lisp代表列表处理)。甚至程序也主要是包含其他列表和符号的列表。Lisp允许您将程序作为列表进行操作,并即时生成新程序。因此,整个code is data and data is code
座右铭。
直接的结果是Lisp语言允许您定义所需的任何接口。compojure是一个很好的例子,它是一个clojure Web框架。这是路由功能的样子
(defroutes app-routes
(GET "/" [] view/page)
(GET "/api" [] (wrap-aleph-handler api/socket-handler))
(route/resources "/static")
(route/not-found "page not found"))
另一个很好的例子是打ic模板框架:
(html [:ul
(for [x (range 1 4)]
[:li x])])
如您所见,结果像胡子一样像DSL一样简洁,但是允许您使用诸如的语言功能(for [x (range 1 4)] block)
。更好的是,您拥有所有用于抽象和构造代码的工具。
在其他语言中,语法更复杂。您不能将Java程序看作一堆列表。但是,通过使用Lisp,您可以更好地了解理想接口的外观,以及代码中的哪些内容可以抽象为数据。它还可以帮助您将喜欢的语言视为一种大数据结构,并更好地理解其语义。
Haskell相信强大的静态类型和纯度。纯函数类似于数学函数:它们在一组值上定义,然后将它们映射到另一组上。函数没有副作用,并且值是不变的。纯度很有趣,因为它不是多范式语言所能拥有的。语言是纯语言还是非纯语言。
结果是,您无法随时执行IO操作(报名者认为这是一件好事)。IO操作被定义为事务,它们本身就是纯值。main
haskell程序的值是运行该程序时执行的IO事务。
您必须明确处理程序中的数据流。您不能通过写入和读取全局变量中的内容来使两个组件进行通信。您必须建立并传递值。
Jimmy Hoffa提到的另一个功能是丰富类型系统。虽然其他语言具有静态类型,但是在haskell中,您可以进行如下操作:
length :: [a] -> Int
(从a的列表到int的函数)
map :: (a -> b) -> [a] -> [b]
(该函数接受a to b
转换和a的列表,然后返回b的列表)
令人高兴的是,我不需要解释这些功能的实际作用:您已经了解了它们的行为。而且,具有这些签名的函数除了计算列表的长度并将映射映射到列表之外,实际上什么也做不到。
在其他类型的语言中,类层次结构与可变性相结合,使得处理这些类型成为噩梦。您必须了解协方差和逆方差之类的东西,从语言的角度来看,这是不可能正确的(即简单,强大和安全)。
您要么选择安全的路径(例如scala)并最终使用了非常复杂的语言,要么您选择了简单的路径并获得了受限的(google go泛型仅限于列表和地图)或不安全的内容(dart泛型始终协变)。
通过使用haskell,您主要了解纯净的好处以及如何编写纯净的代码。
tl; dr学习新知识只会使您成为更好的程序员,而成为更好的程序员与您可以编写代码所用的语言无关。
使用LISP和Haskell有什么优势?
LISP:
- 同音代码。这允许结构化的自我修改代码。
- 语法可识别的宏。它们允许重写样板代码。
- 实用主义。CL旨在使工作的专业人员完成工作。通常,大多数功能语言都不是。
- 灵活性。它可以以合理的速度完成许多不同的事情。
- 警惕。现实世界是混乱的。语用编码最终不得不使用或发明混乱的构造。Common Lisp具有足够的警惕性,可以完成工作。
可以说,选择CL的唯一真正原因是标准库已过时。
我会大胆地说,在一般情况下,语法对于专业软件工作者来说应该不成问题。
来自:为什么Lisp有用?
Haskell:
Haskell是一种计算机编程语言。特别是,它是一种多态静态类型的,惰性的,纯函数式语言,与大多数其他编程语言完全不同。该语言以Haskell Brooks Curry命名,他在数学逻辑方面的工作为功能语言奠定了基础。Haskell基于lambda演算,因此我们将lambda用作徽标。
来自:http : //www.haskell.org/haskellwiki/简介
他们会让我成为更好的程序员吗?
是的,当然,了解更多的语言和范例只会使您成为一个更好的程序员,但是要直截了当:
没有一个工具,一本书,一个编程范例可以使您成为更好的程序员。
学习具有不同范例的不同编程语言绝对可以帮助您成为一名更好的程序员,学习解决具有不同方法的问题也将极大地有益于您的逻辑思维。
成为一个优秀的程序员并不关乎语言,而是关乎具有用任何一种语言解决任何问题的能力。而且,当您不懂该语言时,可以快速学习该语言并有效地使用它。
我认为您的想法越全球化,您就越是优秀的开发人员。
例如,您可以在代码中添加有用的注释,关心代码的可读性和可维护性。注意小细节。输入之前请三思!了解设计模式。遵循良好做法。
披露:这是最糟糕的无耻广告,因为它来自我的博客。