我在这里阅读教程......
http://www.soc.napier.ac.uk/course-notes/sml/tut2.htm
它定义了几个要用作函数的东西......
val first = hd o explode;
val second = hd o tl o explode;
val third = hd o tl o tl o explode;
val fourth = hd o tl o tl o tl o explode;
val last = hd o rev o explode;
然后使用...
fun roll s = fourth s ^ first s ^ second s ^ third s;
它似乎应该可以工作但是当我尝试时,我会在下面收到以下错误。任何人都知道可能会发生什么?
stdIn:159.14-159.53 Error: operator and operand don't agree [tycon mismatch]
operator domain: string * string
operand: char * char
in expression:
fourth s ^ first s
stdIn:159.14-159.53 Error: operator and operand don't agree [tycon mismatch]
operator domain: string * string
operand: _ * char
in expression:
fourth s ^ first s ^ second s
stdIn:159.14-159.53 Error: operator and operand don't agree [tycon mismatch]
operator domain: string * string
operand: _ * char
in expression:
fourth s ^ first s ^ second s ^ third s
答案 0 :(得分:1)
连接运算符连接string
s(它的类型为string * string -> string
),但first
,second
,...函数的类型为{ {1}}。显然,如果我们尝试给string -> char
^
元组,我们会收到编译器的投诉。
教程通过修复程序链接到this page:
将问题6中给出的定义更改为
char * char
fun roll s = implode[fourth s,first s,second s,third s];
我想象他们的代码可以在某些版本的SML中运行,但它对我来说在SML / NJ中并不起作用,尽管他们的注意事项仅适用于莫斯科ML
答案 1 :(得分:0)
错误是说运算符^
适用于这样的字符串:
"ab" ^ "cd" == "abcd"
但是,first
,second
,third
,fourth
和last
这些函数都会返回字符。
来自the string standard library的implode
函数会对此有所帮助。