2012-08-15 80 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谢谢

相关问题