小编nam*_*sis的帖子

在不使用嵌套映射的情况下为列表列表实现映射功能

我为自己设定了以下挑战(并且失败了):

我想编写一个map函数,map f lofls它接受一个函数,f 'a -> 'b和一个列表列表,lofls 'a list list并将这个函数应用于f列表列表的每个元素.我添加的约束是我不允许使用嵌套映射列表,我必须递归地执行它.

我尝试用F#来做,但任何语言都应该这样做.有任何想法吗?

编辑

这是我的尝试(虽然有效,但很难看,我也不喜欢使用rev ......)

let map f lis = 
    let rec map2 f lis aux =
        match (lis, aux) with
        |([], []) -> []
        |([], aux) -> [aux]
        |(hd::tl, aux) ->
            match hd with 
            |[] -> (List.rev aux) :: (map2 f tl [])
            |x::xs -> map2 f (xs::tl) ( (f x) :: aux )
    map2 f lis []
Run Code Online (Sandbox Code Playgroud)

(我也意识到这已经以更简洁的形式发布了)

f# functional-programming sml

2
推荐指数
1
解决办法
106
查看次数

我可以普遍量化 OCaml 函数中的 lambda 参数吗?

我注意到我无法在 OCaml 中执行以下操作:

# let foo (f : 'a -> unit) = f 1; f "s";;
Run Code Online (Sandbox Code Playgroud)
Error: This expression has type string but an expression was expected of type
         int
Run Code Online (Sandbox Code Playgroud)

在 Haskell 中,可以通过使用 Rank2Types 普遍量化输入函数来解决这个问题f

{-# LANGUAGE Rank2Types #-}

foo :: (forall a. a -> ()) -> ()
foo f = let a = f 1 in f "2"
Run Code Online (Sandbox Code Playgroud)

我如何在 OCaml 中获得类似的体验?

ocaml

2
推荐指数
1
解决办法
138
查看次数

标签 统计

f# ×1

functional-programming ×1

ocaml ×1

sml ×1