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 个赞
有更具体的例子吗?