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

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

1 个赞

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

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

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

我可以理解在 map 里可以 break 这个点对很多人来说很有吸引力 (对我来说惰性执行已经可以解决了…), 但是这个 loop 语法的局限性感觉也是有的, 有没有考虑更加强大的迭代构造结构呢, 比如 Scala 的同时迭代多个内容, 或者像 Haskell 一样提供一个强大的序列构造器

1 个赞

有更具体的例子吗?