[英]F# Function programming
定義函數 add10,它接受一個整數參數,將其加 10,然后返回結果。
定義函數 add20,它使用 add10 將 20 添加到給定的整數。 (add20 不允許使用“+”。)
我不確定我是否對此考慮得太深了,有一個更簡單的解決方案,例如添加他不需要的另一個功能,因為他沒有指定我是否可以或不能,但只需要使用 add10 和 add20單獨的功能,但我無法弄清楚如何在沒有加號的情況下將 20 添加到 add10 的結果中。
每當我只使用add20
函數時,它只使用 2 后面的任何整數。
代碼和輸出如下:
> let add10 x = x + 10;;
val add10 : x:int -> int
> add10 2;;
val it : int = 12
> let add20 add10 = add10 * 2;;
val add20 : add10:int -> int
> add20 3;;
val it : int = 6
> let j = 2 |> add10 |> add20;;
val j : int = 24
> let add20 add10 = add10 * 2;;
在這個聲明中,你說add20
是一個函數,它接受一個名為add10
的參數,並返回值add10 * 2
。 如果您為參數使用了不同的名稱,也許這個函數只是將其參數乘以 2 會更清楚:
> let add20 x = x * 2;;
> add20 33;;
val it : int = 66
參數名為add10
事實並不意味着您正在使用具有相同名稱的函數add10
; 請注意類型簽名add20 : add10:int -> int
參數add10
應該是一個int
,而不是一個函數。
您似乎已經想出了如何解決這個問題的基本思路,即add20
函數應該通過執行add10
兩次來工作。 問題是add10 * 2
並不意味着“將函數add10
兩次” ,它的意思是“將數字add10
乘以 2” ,這不是您想要的。
您真正想要做的是調用該函數兩次,其中第一次調用的輸出用作第二次調用的輸入。 您似乎已經知道管道轉發運算符|>
,因此您可以使用它:
> let add20 x = x |> add10 |> add10;;
> add20 33;;
val it : int = 53
或者,如果你看它的另一種方式,你想要的是采取功能add10
和組成與它本身來定義一個新的功能。 如果您熟悉函數組合運算符>>
,則可以編寫:
> let add20 = add10 >> add10;;
> add20 55;;
val it : int = 75
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.