在過去的兩個小時裏,我一直在閱讀有關Haskell中的currying和所有資源,介紹具有多個參數的函數實際上如何返回其他函數,但不知道它們的定義是如何形成的,所以這就是問題所在。Haskell Currying
讓我們定義函數:
myFunc :: (Num a) => a -> a -> a
myFunc x y = x * 2 + x * y
:t (myFunc 2)
打印Num a => a -> a
,即採用一個數量,並且還輸出一個數的函數。但是,(myFunc 2)
返回的函數的定義是什麼樣的?定義中的編譯器是否替換爲x
,而新功能是否變成myFunc' y = 2 * 2 + 2 * y
?
遞歸處理currying如何?如果我定義函數
replicate' :: (Integral i, Ord i) => i -> a -> [a]
replicate' n x
| n <= 0 = []
| otherwise = x : replicate' (n - 1) x
,由(replicate' 3)
在上下文(replicate 3) 'a'
返回什麼功能?
你能解釋一下'\ x - > x:replicate'2 x'是什麼意思?另外,編譯器是否按照我猜測的方式處理'myFunc'? –
恩,你知道lambda函數是如何工作的,對吧?否則,這將是閱讀它們的好時機,它們非常重要。 – leftaroundabout