函数式编程和声明式编程有什么区别?

gab*_*x01 5 functional-programming

我想了解功能和声明性编程之间的区别.

你能告诉我一个代码是声明性但尚未起作用的例子吗?
是否有可能是功能性但不是声明性的,即命令式的?

Ing*_*ngo 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
Run Code Online (Sandbox Code Playgroud)

另一种声明性但不具有功能性的语言是SQL.

请注意,不仅没有作为第一类值的函数.在PROLOG示例中,根本没有功能!可以肯定的是,SQL和PROLOG都有一些内置函数,但无法让你编写自己的函数.人们可以认为这个规则

mortal(X) :- human(X).
Run Code Online (Sandbox Code Playgroud)

是一个函数,但它不是,它是一个推理规则.因此,声明性,非功能性语言.

对于问题的第二部分:在函数式编程语言中编写命令式代码当然是可能的.Simon Peyton Jones曾经说过,他认为Haskell是世界上最好的命令式编程语言.(这只是一个半开玩笑.)

例:

 main = do
      print "Enter a number"
      line <- getLine
      print (succ (read line :: Int))
Run Code Online (Sandbox Code Playgroud)