簡體   English   中英

如何使用currying?

[英]How to use currying?

我在玩椰子 在我的代碼中,我想在列表的每個項目上編寫一個應用函數。 在Python中,就像在Python中一樣,我可以這樣寫:

square = map(x -> x ** 2, [1,2,3]) |> list
square |> print

在線嘗試!

作為一種功能性語言,我希望能夠使用curring。 例如在F#中,它將按預期工作:

let square = [1;2;3] |> List.map(fun x -> x * x)
square |> printfn "%A"

在線嘗試!

嘗試時出現以下錯誤:

square = [1,2,3] |> map(x -> x ** 2) |> list
square |> print

錯誤:

TypeError: map() must have at least two arguments.

在線嘗試!

消息很清楚。 map()沒有收到第二個參數。 如何在椰子中使用咖喱粉?

Coconut的官方文檔中有一個關於curring的條目(也稱為Partial application)。 有可能的。 從文檔中:

Coconut在函數名稱之后但在用於調用該函數表示部分應用程序的右括號之前使用$符號。

Coconut的部分應用程序還支持使用? 跳過部分應用參數,從而推遲填充該參數,直到調用部分應用的函數為止。 如果要部分應用不是按參數順序排在首位的參數,這將很有用。

例:

 expnums \\= range(5) |> map$(pow$(?, 2)) expnums |> list |> print 

您可以這樣寫:

square = [1,2,3] |> map$(x -> x ** 2) |> list
square |> print

在線嘗試!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM