我想了解功能和声明性编程之间的区别。
您能告诉我一个代码是声明性但尚未起作用的示例吗?
是否有可能是功能性但不是声明性的,即必要的?
答案 0 :(得分:6)
非功能性声明性语言是PROLOG。 PROLOG中的编程说明了许多事实,然后提出问题,系统试图验证或拒绝。
示例:
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).
是一个函数,但它不是一个推理规则。因此,声明性,非功能性语言。
对于问题的第二部分:在函数式编程语言中编写命令式代码当然是可能的。 Simon Peyton Jones曾说他认为Haskell是世界上最好的命令式编程语言。 (这只是一个半开玩笑。)
示例:
main = do
print "Enter a number"
line <- getLine
print (succ (read line :: Int))