2016-11-29 87 views
2

学习elm但没有得到什么意思笔者通过以下:为什么榆树不使用括号?

我们能够避免写括号的原因是因为功能 应用关联到左边。

+2

'a b c' =='((a b)c)'; (a(b)c)d)'; 'abc = ... body ...'=='a =(\ bc - > ... body ...)'=='a =(\ b - >(\ c - > ... body。 ..))'。 –

回答

8

在函数名称后面指定的任何值或函数都将与该函数相关联,因为它是自动参数,这就是所有的意思。

在语言,如JavaScript,您可以明确区分功能的使用,作为一种表达:

function foo (message) { 
    return message 
} 

console.log(foo)   // Function as expression. 

console.log(foo('Hello')) // Function application with result: "Hello" 

在榆树这种行为不需要parentesis。

foo message = 
    message 

foo   -- Function as expression. 

foo "Hello" -- Function application with result: "Hello" 

当你想应用该函数并对结果进行处理时,它完全不同于JavaScript。在这里,你将不得不明确地告诉编译器,这(foo "Hello")String.toUpper

String.toUpper (foo "Hello") -- "HELLO" 
1

一个参数有问题的括号中是((divide 5) 2)。我对该句的解释是,您可以将((divide 5) 2)编为divide 5 2,因为divide 5 2是从左起第一个,即divide 5 -> divide5,然后divide5 2 -> 2.5进行评估。

虽然我看不出还有什么可以评估! 5 2divide 2然后divide2 5都没有意义。