【发布时间】:2016-03-02 02:49:20
【问题描述】:
我有一个函数 foo 接受一个字符。我想将该函数映射到字符串中的每个字符。
fun foo (ch : char) =
ch;
fun bar (str : string) =
map foo [(str)];
显然,由于将字符串应用于需要 char 的函数,这将不起作用。所以我尝试使用 String.explode(str) 将其分解为一个 char 数组,但是我似乎无法映射数组中的每个 char 并将 char 应用于 foo 函数。
fun foo (ch : char) =
ch;
fun bar (str : string) =
map foo [(String.explode(str))];
如何将函数映射到字符串中的每个字符?
编辑: 我想把 foo 改成 2 个参数
fun foo(ch : char, i : int) =
ch;
fun bar(str : string) =
map foo (String.explode(str), 1);
但这给了我一个大亨不匹配
operator domain: (char * int) list
operand: char list * int
为什么以前 Map 函数会理解 String.explode(str) 来映射每个字符,但现在它会将其视为完整的字符列表?
编辑 2:没关系,想通了。
fun bar(str : string) =
map (fn x => foo (x, 1)) (String.explode(str));
【问题讨论】:
-
如果你想避免代价高昂的爆炸/内爆,你也可以使用
CharVector.map,它的类型为(char -> char) -> string -> string(standardml.org/Basis/mono-vector.html#MONO_VECTOR:SIG:SPEC)。