我读过富希基说过的地方:



我对clojure不熟悉。
1. Clojure是否有延续?
2.如果没有,您是否不需要继续?我看到了很多很好的例子,尤其是从this guy。有什么选择?
3.如果是,是否有文档?

最佳答案

在谈论延续时,您必须区分两种不同的延续:

  • 一流的延续–在语言(方案或Ruby)中深度集成的延续支持。 Clojure不支持一流的延续。
  • 连续传递样式(CPS)– CPS只是一种编码样式,任何支持匿名功能的语言都将允许这种样式(也适用于Clojure)。

  • 例子:

    -- Standard function
    double :: Int -> Int
    double x = 2 * x
    
    -- CPS-function – We pass the continuation explicitly
    doubleCPS :: Int -> (Int -> res) -> res
    doubleCPS x cont = cont (2 * x)
    

    ; Call
    print (double 2)
    
    ; Call CPS: Continue execution with specified anonymous function
    double 2 (\res -> print res)
    

    在Wikipedia上阅读continuation

    我认为,对于一种好的语言而言,延续不是必需的,但是尤其是像Haskell这样的功能语言中的一流延续和CPS可能会非常有用(intelligent backtracking example)。

    关于functional-programming - Clojure的延续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1173133/

    10-12 02:51