1
我試圖寫這個函數施加組合物和局部應用與Haskell中:添加具有組合物和局部應用的Haskell值
function m n = (m^2) + n
我試圖與:
function m = (m^2).(+)
我試圖寫這個函數施加組合物和局部應用與Haskell中:添加具有組合物和局部應用的Haskell值
function m n = (m^2) + n
我試圖與:
function m = (m^2).(+)
的問題該方法是(+)
是一個二元運算符。由於您將其放在點.
的右側,因此它不會應用於左操作數。所以,你已經寫了:
function :: Num a => a -> a -> a
function m = (.) (m^2) (+) -- wrong
這是短期的:
function m = \n -> ((m^2) ((+) n))
這樣就意味着(+) n
將導致功能(n+)
,我們將應用功能的(m^2)
結果,這不很有意義。
但是,您可以簡單地使用:
function :: Num a => a -> a -> a
function m = (+) (m^2)
或者:
function :: Num a => a -> a -> a
function m = ((m^2) +)
鑑於function m = (+) (m^2)
,如果我們對功能應用n
,我們將獲得:
((+) (m^2)) n
-> (+) (m^2) n
-> (m^2) + n
你可以進一步修改function
並刪除m
論證以及與:
function :: Num a => a -> a -> a
function = (+) . (^ 2)
這是語法糖:
function :: Num a => a -> a -> a
function = (.) (+) (^2)
如果我們現在在功能應用m
,它會評估爲:
((.) (+) (^2)) m
-> (\x -> (+) ((^2) x)) m
-> (+) ((^2) m)
-> (+) (m^2)
所以我們獲得像上一個命令一樣的狀態。
謝謝@Willem Van Onsem – cde33
你想用第二個做什麼?當你嘗試時會發生什麼? –
這是錯的。請看看Willem的回答 – cde33