我认识一些程序员,他们在一起时一直在谈论 Haskell,所以每个人似乎都喜欢这种语言。擅长 Haskell 似乎有点像天才程序员的标志。
有人可以举几个 Haskell 的例子来说明为什么它如此优雅/优越吗?
最佳答案
这是说服我学习 Haskell 的例子(我很高兴我做到了)。
-- program to copy a file --
import System.Environment
main = do
--read command-line arguments
[file1, file2] <- getArgs
--copy file contents
str <- readFile file1
writeFile file2 str
好的,这是一个简短、可读的程序。从这个意义上说,它比 C 程序更好。但这与(比如说)结构非常相似的 Python 程序有何不同?
答案是惰性评估。在大多数语言(甚至是一些函数式语言)中,类似于上述结构的程序将导致整个文件被加载到内存中,然后以新名称再次写出。
Haskell 很“懒”。它不会在需要时计算事物,并且通过扩展不会计算它永远不需要的事物。例如,如果您要删除 writeFile
行,Haskell 不会首先从文件中读取任何内容。
事实上,Haskell 认识到 writeFile
依赖于 readFile
,因此能够优化此数据路径。
虽然结果取决于编译器,但运行上述程序时通常会发生以下情况:程序读取第一个文件的一个 block (例如 8KB),然后将其写入第二个文件,然后读取另一个 block 从第一个文件,并将其写入第二个文件,依此类推。 (尝试在其上运行 strace
!)
...这看起来很像文件复制的高效 C 实现的功能。
因此,Haskell 可以让您编写紧凑、可读的程序 - 通常不会牺牲大量性能。
我必须补充的另一件事是 Haskell 使得编写有错误的程序变得困难。令人惊叹的类型系统、无副作用,当然还有 Haskell 代码的紧凑性,至少出于以下三个原因减少了错误:
更好的程序设计。降低复杂性可以减少逻辑错误。
紧凑的代码。存在错误的行数更少。
编译错误。很多错误都不是有效的 Haskell。
Haskell 并不适合所有人。但每个人都应该尝试一下。
关于haskell - Haskell 有什么大惊小怪的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/775726/