簡體   English   中英

F# 函數編程

[英]F# Function programming

  1. 定義函數 add10,它接受一個整數參數,將其加 10,然后返回結果。

  2. 定義函數 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.

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