我正在自学Haskell,我遇到了两个“翻转”函数的实现,这两个实现向我提出了关于名称声明的问题。在第二个例子中,我搞不懂为什么我们还没有声明x或y就可以编写g x y = f y x。我理解延迟求值意味着在需要它们之前都不会进行求值,但我希望编译器至少需要一个声明。即使没有类型签名,它也可以编译...这可以很好地工作: where g x y = f y x
那么x和y仅仅是完全无类型的变量吗?或者是发生了什么别的事情?
我的createRandomList函数中的randomNumber变量是作用域还是块作用域?我的for循环块的i变量声明是作用域还是函数作用域?在所有类型的循环中,如果我使用let键在for循环的圆括号部分声明一个变量(for(let i = 0; i < something.length; i += 1) {