标准ML - 通过教程,但示例失败

时间:2015-10-31 19:29:45

标签: sml

我在这里阅读教程......

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

2 个答案:

答案 0 :(得分:1)

连接运算符连接string s(它的类型为string * string -> string),但firstsecond,...函数的类型为{ {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"

但是,firstsecondthirdfourthlast这些函数都会返回字符。

来自the string standard libraryimplode函数会对此有所帮助。