Functional programming 函数式编程和声明式编程的区别是什么?

Functional programming 函数式编程和声明式编程的区别是什么?,functional-programming,Functional Programming,我想了解函数式编程和声明式编程之间的区别 你能给我举个例子吗,代码是声明性的,但还没有功能性的? 是否可以是功能性的而不是声明性的,即命令式的?一种非功能性的声明性语言是PROLOG。PROLOG中的编程是陈述大量事实,然后提出问题,系统试图验证或否认这些问题 例如: human(socrates). // "Socrates is a human." mortal(X) :- human(X). // "If X is a human, then X is mortal" or

我想了解函数式编程和声明式编程之间的区别

你能给我举个例子吗,代码是声明性的,但还没有功能性的?

是否可以是功能性的而不是声明性的,即命令式的?

一种非功能性的声明性语言是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
 main = do
      print "Enter a number"
      line <- getLine
      print (succ (read line :: Int))
另一种众所周知的声明性而非功能性语言是SQL

请注意,不仅没有函数作为第一类值。在PROLOG示例中,根本没有函数!当然,SQL和PROLOG都有一些内置函数,但无法让您编写自己的函数。人们可能会认为规则

mortal(X) :- human(X).
是一个函数,但它不是,它是一个推理规则。因此,声明性的、非功能性的语言

关于问题的第二部分:当然可以用函数式编程语言编写命令式代码。曾经说过,他认为Haskell是世界上最好的命令式编程语言。(这只是半个玩笑。)

例如:

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
 main = do
      print "Enter a number"
      line <- getLine
      print (succ (read line :: Int))
main=do
打印“输入一个数字”

好的,如果我理解正确的话,你不一定需要声明性的函数,你也不需要声明性的函数,但是假设你想同时具有功能性和命令性。那么你最终会改变在FP中被禁止的状态,对吗?@gabox01-注意第二点。我只是说,你可以编写在函数式语言中似乎必不可少的代码。函数式编程使用声明式风格只是为了避免状态突变吗?@gabox01我不这么认为。