2012-08-15 58 views
2

寫任何ocaml的功能,其類型爲('a -> 'b) list -> 'a -> 'b list功能型的( 'A - >' B)列表 - > 'A - >' b在OCaml的列表

('a -> 'b) list是混淆了我的一部分最。我是OCaml的新手,並且很難理解如何編寫函數來獲取特定的數據類型類型。

# let int x = x+1;; 
# let fcn = [int; int];; 

我可以使用這兩件事來幫助我,但我仍然對如何將思想轉化爲代碼感到困惑。所以我傳遞一個函數和一個變量。我將把這個變量添加到列表的每個元素並返回列表?

回答

6

('a -> 'b)表示從類型'a到類型'b的功能。基本上,您需要創建一個函數,該函數使用'a並返回並返回值的函數列表,並返回值列表(可能通過將函數列表的每個函數應用於具體的'a值)。

4

由於這是作業,我不會爲您提供完整的解決方案。但是,作爲一個提示,我建議你看看這個實施熟悉map功能:

let rec map f = function 
    | [] -> [] 
    | x :: xs -> f x :: map f xs 

它的類型是('a -> 'b) -> 'a list -> 'b list這意味着它作爲它的第一個參數一個函數,它的一些值將'a鍵入某種類型的值'b,將其作爲第二個參數輸入'a類型的元素列表,並生成'b類型的元素列表。它通過參數列表上的模式匹配來進行,並遞歸地將函數(f)應用於列表的每個元素x

現在看看你必須寫的函數的類型嗎?它告訴你關於該功能所需行爲的是什麼?牢記map函數的實現,你將如何編寫你的函數?

+0

我在想和嘗試實現一個類似於在響應一中描述的功能。我不熟悉保留字「地圖」,我們還沒有完成這個新的ocaml。我會看你的建議謝謝你! – 2012-08-21 05:26:17

+0

我道歉地圖不是一個保留字它的函數的名稱。 – 2012-08-21 05:31:48

+0

我知道這是您提供的非常好的回覆我剛剛對此非常瞭解,並且我很難理解您的函數中發生了什麼,如果您可以提供更好的解釋,那就太棒了!謝謝 我會寫兩個函數來調用另一個函數嗎? 等號後的功能是保留字嗎? 所以我從問題(數據類型)瞭解到,我需要編寫一個函數,在列表中執行一個操作,比如向列表映射'a'中的每個元素添加一個int b? [1,2,3] - > [2.3.4]爲每個元素添加一個,但不返回正確的類型? – 2012-08-21 05:44:23

2
('a -> 'b) list -> 'a -> 'b list 

這意味着你的函數有兩個參數

  • ('a -> 'b)列表表示的函數取作爲參數'a類型的元素並返回'b類型的元素。正如你所看到的,這些類型是抽象的,所以它們可以是任何類型的,例如(int -> int)(int -> float)等等......
  • 類型的元素'a。請注意,此類型必須與您的函數的參數相同。

因此,您將使用您給出的元素作爲參數來生成結果列表。

這裏是一個小例子:

let action l a = 
    let rec todo l res = 
    match l with 
     | [] -> res 
     | h :: t -> todo t [email protected][h a] in 
    todo l [] 

所以在這裏,int -> int類型的任何功能將被接受。只要你不把它們與其他類型混合,其他類型也一樣。

0
let rec func f a = match f with   (* ('a->'b) list -> 'a -> 'b list *) 
         |[]->[] 
         |x::lr -> x a :: func lr a;; 

這可能有幫助!它工作正常...
1 -所以正如我們所知,OCaml的一行

2創造我們的功能線的類型 - 本功能,我們有兩個參數˚F一個

3 -( '一個 - >' B)列出:爲˚F

4 -「一個:爲一個
! ocaml如何做到這一點?聽!

5 -當我們匹配f控制[]「空白列表」 ocaml的釋放是一個列表(****)名單,但不知道是什麼還包含最後一行他會做的代碼行嗎?很好!
- 在這裏,我們是在代碼的最後一行,我們只有F型列表 -

6 -X :: LR意味着我們那種是元素的第一要素匹配之前:OCaml中給出了一個爲其匹配列表元素類型˚F,我們添加一個這裏˚F作爲第一要素的OCaml讓他們從類型「一個'Z所以在這裏,我們有(' A - >'B)列出˚F'爲一個一個
,尤其是圓形,我們有F型的(' A-> 'b)列出,和類型的' 一個

7 -次的結果是功能'B列表所以它是由你來回答評論! :D謝謝

相關問題