-1

我是 SML 的初学者。这很容易,但花了几个小时,但我无法解决。

我必须获取一个字符串列表并反转每个字符串以及列表。并且在不定义 main 之外的多个函数的情况下做所有事情。例如 ["stack","overflow","nice"] 会给出 ["ecin","wolfrevo","kcats"]

fun oppositelist(l)=foldl (op::) nil (map ((fn(x)=>(implode o rev o explode)(x)), l));

错误信息是:

Error: operator and operand don't agree [tycon mismatch]
  operator domain: 'Z -> 'Y
  operand:         (string -> string) * 'X
  in expression:
    map ((fn x => <exp> <exp>),l)

如果方法错误,不要解决所有问题。提示一下。它是一个家庭作业问题。

谢谢你。

4

1 回答 1

1

SML 函数mapcurriedf要在列表的每个元素上映射一个函数l,您必须编写map f l. 你写的是map (f,l),这意味着“将函数映射到(f,l)......稍后确定的东西”。编译器在抱怨你,因为(f,l)不是一个函数('Z -> 'Y);它是一个由函数和列表 ( (string -> string) * 'X) 组成的元组。

我没有仔细研究您的解决方案,但是如果您对此答案发表评论并要求我这样做,我可能会这样做。:)

编辑:哦,(fn(x)=>(implode o rev o explode)(x))这只是一种冗长的写作方式,就像(implode o rev o explode)写作(fn(x)=>f(x))是一种冗长的写作方式一样f

于 2012-10-04T22:08:25.687 回答