“我可以像那样在一个 sml 函数中写 2 条指令吗?
"Can I write 2 instructions in one sml function like that '?
所以我想打印一个列表,其中包含最多 n 个数字的所有平方。(在 sml nj 中)
Example
>printl 3 ;
> [0,1,4,9]
问题是我必须使用这个函数“creat”打印它们,它创建了一个列表:
(*print elements squares up to n*)
fun printl n =
( print(Int.toString(hd (creat n []))); printl(n-1); );
(*creat a list *)
fun creat n acc = if n<0 then acc
else (creat (n-1) ((n*n)::acc) );
如您所见,我尝试使用 [] 调用“creat”以创建最多 n 的所需方块列表,然后我尝试打印头部,同时递归调用剩下的部分(printl n -1).
我生成了这个错误 但是:
sml square.sml:2.55 Error: syntax error: replacing RPAREN with LET
所以我猜 printl 中的指令数量有问题吗?
问题出在 printl(n-1)
之后的分号,因为您的
编译器等待另一个表达式。因此,错误消息
这意味着他不会在这里接受 )
,而是接受 let
。所以就
删除那个分号。
注意分号有两种不同的含义:
对表达式 a ; b ; c
进行排序。所以在那种情况下 a ; b ;
在语法上是不正确的 ;
或者在顶层标记声明的结束,以便按顺序
让编译器知道你已经完成了当前的定义(如
你已经完成了你的两个功能)。
所以我想打印一个列表,其中包含最多 n 个数字的所有平方。(在 sml nj 中)
Example
>printl 3 ;
> [0,1,4,9]
问题是我必须使用这个函数“creat”打印它们,它创建了一个列表:
(*print elements squares up to n*)
fun printl n =
( print(Int.toString(hd (creat n []))); printl(n-1); );
(*creat a list *)
fun creat n acc = if n<0 then acc
else (creat (n-1) ((n*n)::acc) );
如您所见,我尝试使用 [] 调用“creat”以创建最多 n 的所需方块列表,然后我尝试打印头部,同时递归调用剩下的部分(printl n -1).
我生成了这个错误 但是:
sml square.sml:2.55 Error: syntax error: replacing RPAREN with LET
所以我猜 printl 中的指令数量有问题吗?
问题出在 printl(n-1)
之后的分号,因为您的
编译器等待另一个表达式。因此,错误消息
这意味着他不会在这里接受 )
,而是接受 let
。所以就
删除那个分号。
注意分号有两种不同的含义:
对表达式
a ; b ; c
进行排序。所以在那种情况下a ; b ;
在语法上是不正确的 ;或者在顶层标记声明的结束,以便按顺序 让编译器知道你已经完成了当前的定义(如 你已经完成了你的两个功能)。