Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List SML向列表添加索引_List_Sml - Fatal编程技术网

List SML向列表添加索引

List SML向列表添加索引,list,sml,List,Sml,给定一个泛型列表,返回一个包含元组中相同对象的列表,其索引在列表中 例如: f ["a", "b"]; - val it = [(0,"a") , (1,"b")] : (int * string) list 函数应该是一个单行程序,这意味着没有模式匹配、递归、if/else、helper函数和let/local。到目前为止,我只能根据输入列表列出索引: fun f lst = List.take((foldl (fn (x,list) => [(hd(list)-1)]@list) [

给定一个泛型列表,返回一个包含元组中相同对象的列表,其索引在列表中

例如:

f ["a", "b"];
- val it = [(0,"a") , (1,"b")] : (int * string) list
函数应该是一个单行程序,这意味着没有模式匹配、递归、if/else、helper函数和let/local。到目前为止,我只能根据输入列表列出索引:

fun f lst = List.take((foldl (fn (x,list) => [(hd(list)-1)]@list) [length(lst)] (lst)),length(lst));
f [#"a",#"b"];
- val it = [0, 1]: int List.list;

我应该将列表项添加到元组中的这些索引中,但我不确定如何执行该操作。

这里有一个解决方法的提示:

1) 使用
List.sub
,创建一个匿名函数,将索引
i
发送到由
i
和索引
i
处的
lst
元素组成的对

2) 将其映射到通过调用
列表获得的结果上。在
长度lst
上制表
,并将
x
发送到
x
的函数


我能够(在一行上)实现这一点,但与简单的模式匹配方法相比,结果很糟糕。除了作为一个谜题,我看不出禁止SML成为优雅语言的动机。

似乎我忘记了使用#I操作符访问元组的第I个元素。答案如下:

fun f xs = List.take((foldr (fn (x,list) => [(#1(hd(list))-1,x)]@list) [(length(xs),hd(xs))] (xs)),length(xs));
f (explode "Hello");
- val it = [(0, #"H"), (1, #"e"), (2, #"l"), (3, #"l"), (4, #"o")]: (int * char) List.list;