我剛開始使用 Haskell 進行編程,剛剛學習了 lambda 函式。作為練習,我嘗試將以下示例轉換為使用 lambda。
calcChange owed given =
if change > 0
then change
else 0
where change = given - owed
calcChange 9 7退貨0和calcChange 7 9退貨2
現在,這是我的嘗試
calcChange owed given =
(\change ->
if change > 0
then change
else 0
) given - owed
失敗:calcChange 7 9回傳2但calcChange 9 7回傳-2。
我的嘗試有什么問題?
uj5u.com熱心網友回復:
在第一個示例中,change具有 value given - owned。第二種,簡單的given。然后owned從它們中減去該 lambda 的結果。
您可能打算將given - owned作為引數發送給該 lambda。
calcChange owed given =
(\change ->
if change > 0
then change
else 0
) (given - owed)
或者,使用$:
calcChange owed given =
(\change ->
if change > 0
then change
else 0
) $ given - owed
uj5u.com熱心網友回復:
lambda 只接收given.
(\change ->
if change > 0
then change
else 0
) given - owed
==>
(if given > 0 then given else 0) - owed
==>(因為given是正數)
given - owed
uj5u.com熱心網友回復:
運算子的優先級都在 0 到 9 之間。但是,函式應用程式的行為類似于優先級為 10 的運算子,所以
(\change ->
if change > 0
then change
else 0
) given - owed
表現得像
((\change ->
if change > 0
then change
else 0
) given) - owed
不是
(\change ->
if change > 0
then change
else 0
) (given - owed)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528509.html
標籤:哈斯克尔
