函数式的loop循环新语法感觉有点怪

loop 循环感觉与 scheme 中的 named let 语法类似,
只是一种函数定义并调用的简写形式,
感觉这种语法糖破坏了语言结构,
与大多数语言的循环结构不一致,给新人入门造成困惑

1 个赞

loop 和 named let 确实很相似。named let + 模式匹配差不多就是 loop 了。

loop 处理的不是 for/while 这类循环,而是函数式语言里很常见的,定义一个递归辅助函数然后马上调用它的场景。和 named let 解决的问题也是一样的。因为这个场景真的非常非常常见,所以给一个语法糖也挺好的。

另外 MoonBit 里 loop 其实不是单纯的语法糖。 loop 不需要引入一层额外的函数,所以 loop 里面可以 return 到外面的函数,而递归辅助函数不行。另外 loop 对类型检查更友好,递归辅助函数可能需要给参数标类型,而 loop 不需要。