【发布时间】:2019-03-31 14:26:42
【问题描述】:
我给自己设定了以下挑战(但失败了):
我想编写一个映射函数 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 []
(我也意识到这已经以更简洁的形式发布了)
【问题讨论】:
-
你有什么代码可以显示你失败的尝试吗?你具体在哪里遇到了困难?
-
抱歉回复晚了,这里是上面的尝试。
标签: functional-programming f# sml