问题描述
所以我想打印一个列表,其中包含最大为 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 ;
在语法上是不正确的 ; -
或要么按顺序在顶层标记声明的结束 让编译器知道您已完成当前定义(如 你已经完成了你的两个功能)。