2013-03-07 131 views
0

我目前正試圖定義一個類型爲'a - >'a) - >'a - >'的函數,它需要一個類型爲'a - >'的函數和一個類型爲「a」的參數,並在該參數上調用該函數兩次。我對OCaml比較陌生,但我確實知道如何定義一個函數,但是我沒有嘗試過使用試錯法,或者Google試圖讓一個函數作爲參數,然後再使用這個函數兩次。定義一個函數作爲參數

任何提示或指針將不勝感激,在此先感謝。

編輯:感謝Jeffrey下面,我的問題現在已解決。

let f4 g a = g(g a);;

VAL F4:( 'A - >' 一) - > 'A - >' 一個=

回答

1

OCaml的推斷類型,因此,如果您使用的參數作爲一個函數,它推斷出它的功能。這裏有一個例子:

# let f g = g 8 + g 10;; 
val f : (int -> int) -> int = <fun> 
# (~-);; 
- : int -> int = <fun> 
# f (~-);; 
- : int = -18 

要理解的例子,注意(~-)是普通的整數否定運算符。

更新:提示您的更復雜的問題。您需要測試的值爲n。也許if聲明會起作用?第二個提示:如果你使用遞歸,你不需要使用循環。如果你想使用循環,不要使用遞歸。 (就我個人而言,我建議使用遞歸,這就像學習鋼琴時彈奏音階。)

+0

這與我所需要的非常接近,但我需要它從字面上採取'a的一切。 它應該與('a - >'a) - >'a - >' 當試着#let f4 g a = g a * g a ;;我得到 VAL F4:( 'A - > INT) - > 'A - > INT = 這是接近,但不完全(' A - >' 一) - > 'A - >' 一個 任何建議? – Bizzle 2013-03-08 00:18:27

+0

對,我不想只給你答案!這個最新嘗試的問題是'*'運算符只能用於ints。嘗試做一個沒有綁定到特定類型的操作(比如說做一個列表或元組)。 – 2013-03-08 00:20:26

+0

#let f4 g a = g a :: g a :: [] ;; val f4:('a - >'b) - >'a - >'b list = again我很接近。我將如何讓所有事情成爲'一個? (我學習這門語言的方式很差勁,我對教學風格並沒有留下深刻的印象,所以我的知識非常好) – Bizzle 2013-03-08 00:23:25

相關問題