我希望了解函数式编程和声明式编程的区别。
你能给我展示一个代码是声明式的但不是函数式的例子吗?
是否可能是函数式的但不是声明式的,即命令式的?
我希望了解函数式编程和声明式编程的区别。
你能给我展示一个代码是声明式的但不是函数式的例子吗?
是否可能是函数式的但不是声明式的,即命令式的?
human(socrates). // "Socrates is a human."
mortal(X) :- human(X). // "If X is a human, then X is mortal" or
// "All humans are mortal."
? mortal(socrates) // Is Socrates mortal?
Yes.
? mortal(X) // Who is mortal?
socrates
? mortal(pythagoras).
No. // since system doesn't know about any human except Socrates
另一个众所周知的声明性语言是 SQL,但它不是函数式的。
需要注意的是,在 PROLOG 的例子中,没有函数作为一等值。确实,SQL 和 PROLOG 都有一些内置函数,但它们没有办法让你编写自己的函数。有人可能会认为这条规则:
mortal(X) :- human(X).
"is a function",但它实际上是推理规则。因此,它是声明性的,非函数式的语言。
对于您问题的第二部分:在函数式编程语言中编写命令式代码当然是可能的。Simon Peyton Jones曾经说过,他认为Haskell是世界上最好的命令式编程语言(这只是半开玩笑)。
例如:
main = do
print "Enter a number"
line <- getLine
print (succ (read line :: Int))