Ocaml 逆向和映射
Ocaml reverse and map
我有一个任务要创建 map_reverse 函数。
let rec map_rev func = function
[] -> []
| h::t -> map_rev func t @ func h;;
let f x = x * 7;;
open Printf
let a = map_rev f [1;2;10;20;400]
let () = List.iter (printf "%d ") a
现在,编译器将不允许这一行:
let a = map_rev f [1;2;10;20;400]
因为:
'This expression has type 'a * 'b but an expression was expected of type 'c -> 'd list'.
谁能指出我的错误?为什么它期望 'c -> 'd 列表?
地图反转函数的类型应该是('a -> 'b) -> 'a list -> 'b list
。您的 map_rev
函数的类型为 ('a -> 'b list) -> 'a list -> 'b list
。所以关键是弄清楚为什么编译器认为 func
returns a list.
let rec map_rev func = function
[] -> []
| h::t -> map_rev func t @ [func h ];;
我有一个任务要创建 map_reverse 函数。
let rec map_rev func = function
[] -> []
| h::t -> map_rev func t @ func h;;
let f x = x * 7;;
open Printf
let a = map_rev f [1;2;10;20;400]
let () = List.iter (printf "%d ") a
现在,编译器将不允许这一行:
let a = map_rev f [1;2;10;20;400]
因为:
'This expression has type 'a * 'b but an expression was expected of type 'c -> 'd list'.
谁能指出我的错误?为什么它期望 'c -> 'd 列表?
地图反转函数的类型应该是('a -> 'b) -> 'a list -> 'b list
。您的 map_rev
函数的类型为 ('a -> 'b list) -> 'a list -> 'b list
。所以关键是弄清楚为什么编译器认为 func
returns a list.
let rec map_rev func = function
[] -> []
| h::t -> map_rev func t @ [func h ];;