这绝对是主观的,但我想尽量避免它变得有争议.我认为如果人们适当地对待它可能是一个有趣的问题.
对这个问题的想法来自评论跟帖从我的回答到:"你恨你喜欢的语言什么的五件事?" 问题.我争辩说C#中的类应该默认密封 - 我不会把我的推理放在这个问题上,但我可以写一个更全面的解释作为这个问题的答案.我对评论中讨论的热度感到惊讶(目前有25条评论).
那么,你持有什么有争议的意见?我宁愿避免那种以相对较少的基础(例如括号放置)而变得非常宗教的东西,但是例子可能包括诸如"单元测试实际上并不十分有用"或"公共领域真的很好"之类的东西.重要的是(对我来说,无论如何)是你有理由支持你的意见.
请提出您的意见和推理 - 我鼓励人们投票支持有争议和有趣的意见,无论您是否恰好同意这些意见.
我是Haskell的新手,我实际上刚刚在10分钟前开始.我试图弄清楚如何在函数内定义变量.让我们说我有这个功能
foo :: Int -> Int
foo a = 
    b = a * 2
    b
-- Yes, I know, it doesn't do anything interesting
当我运行它时,GHCi我得到一个语法错误!如何在函数内定义变量?
我试图弄清楚Haskell是使用动态还是静态范围.我意识到,例如,如果你定义:
let x = 10
然后定义功能
let square x = x*x
你有2个不同的"x",这是否意味着它是动态范围的?如果没有,它使用什么范围,为什么?
此外,Haskell变量是否具有别名(相同内存位置/值的不同名称)?
谢谢.
为什么我被迫写liOfLi代替LiOfLi?请指导.
baby.hs中的代码
LiOfLi = [[1,3,4,5,6,8],[12,13,15,16,19,20],[23,24,25,45,56]]
ghci回复:
ghci>:l baby
[1/1]编译Main(baby.hs,解释)
失败,模块加载:无.ghci> baby.hs:29:1:不在范围内:数据构造函数`LiOfLi'
将首字母更改为较小的情况时
baby.hs中的代码
liOfLi = [[1,3,4,5,6,8],[12,13,15,16,19,20],[23,24,25,45,56]]
ghci回复:
ghci>:l baby
[1/1]编译Main(baby.hs,解释)
好的,模块加载:Main.
以下是我提到的SO问题,但我没有理解规则/逻辑,并得到(我)上述问题的答案.
变量名称必须小写.与此相关的官方文档位于haskell.org/onlinereport/intro.html#namespaces - (SO评论) Chris Kuklewicz
如果我想表达像[只是一个简单的例子]:
int a = 0;
for (int x = 0; x < n; x += 1)
    a = 1 - a;
我应该在Haskell中做什么,因为它没有可变的概念?(也许是错的,请参阅:Haskell有变量吗?)