似乎所有编程语言都使用逗号(,)来分隔函数参数。
为什么它们不使用空格呢?
似乎所有编程语言都使用逗号(,)来分隔函数参数。
为什么它们不使用空格呢?
function(a, b - c);
如果用空格代替逗号,那会是什么样子?
function(a b - c);
这是否意味着 function(a, b - c);
或者 function(a, b, -c);
?逗号的使用可能源自数学,数学中几个世纪以来一直使用逗号来分隔函数参数。
function a (b - c)
(或在 lisp 中是 (function a (- b c))
)。 - sepp2kfoo x y z = ...
定义为 foo x = \y -> (\z -> ...)
,其中 \ 开始一个 lambda,从而使部分应用变得非常容易),这可以使一些函数式代码更加优美。考虑 sumOfOddSquares = sum . filter odd . map (^2) $ [1..]
(摘自 Learn You A Haskell)。 - user395760首先,您的前提是错误的。有些语言使用空格作为分隔符(lisp、ML、haskell,可能还有其他语言)。
大多数语言不采用空格作为分隔符的原因可能是a) f(x,y)
是大多数人从数学中习惯的表示法;b) 使用空格会导致很多嵌套的括号(也称为“lisp效应”)。
Forth
使用空格作为分隔符,并且最小化使用括号。 - ypercubeᵀᴹ(f arg1 arg2 arg3)
,这基本上就是你所要求的。ML-类似的编程语言使用连接将柯里化参数应用于函数中,因此您可以编写f arg1 arg2 arg3
。Tcl 使用空格作为传递给命令的单词之间的分隔符。如果有复合参数,那么必须用括号或其他方式加以引用。请注意,即使在此处,您也会发现逗号作为分隔符的使用 - 仅在表达式语法中 - 但这是因为该表示法在编程以外的常见用途中被广泛使用。数学已经使用这种方式书写了n元函数应用很长时间了;计算机(尤其是Fortran)只是借鉴了这种表示法。
有许多历史原因,已经指出。
此外,在大多数语言中,逗号,
用作分隔符,空格序列大多被忽略,或者更准确地说,虽然它们可以分隔标记,但它们本身不起作为标记的作用。这对于所有从C语法派生其语法的语言来说都是正确的。一系列空格就像空单词一样,让空单词限定任何东西可能不是最好的想法。
此外,我认为这样更清晰、更易读。为什么要有看不见的字符——空格,本质上除了格式化之外没有任何作用,作为真正有意义的分隔符呢?这只会引入歧义。其中一个例子是卡尔提供的。
第二个例子是f(a (b + c))
。现在是f(a(b+c))
还是f(a, b+c)
?
JavaScript的创建者有一个非常有用的想法,与您的类似,但也存在同样的问题。这个想法是,如果语句完整,回车也可以作为;
。请注意:
function a() {
return "some really long string or expression or whatsoever";
}
function b() {
return
"some really long string or expression or whatsoever";
}
alert(a());//"some really long string or expression or whatsoever"
alert(b());//"undefined" or "null" or whatever, because 'return;' is a valid statement
;
。,
大多数情况下都是不必要的,于是就决定将其删除。我们不必去看自然语言中的大部分语言,就可以看到逗号用于分隔列表中的项目。因此,对于第一次学习编程语言的人来说,使用除逗号以外的任何东西来列举参数都会出乎意料。
multList :: [Int] -> Int -> [Int]
multList (x : xs) y = (x * y) : (multList xs y)
multList [] _ = []
void foo(void * ptr point & * big list<pointers<point> > * t)
逗号就像空格一样有用。在拉丁语中,没有使用空格、句号或小写字母。
试着读一下这个:
IAMTHEVERYMODELOFAWHATDOYOUWANTNOTHATSMYBUCKET
主要是为了帮助你阅读东西。
这可能听起来有点“明智”,但我认为大多数地球语言使用它的原因相同(英语、法语和其他几种语言;-)此外,对于大多数人来说,这也是直观的。
似乎所有编程语言都使用逗号(,)来分隔函数参数。
在包含逗号的自然语言中,该字符用于分隔事物。例如,如果您要枚举水果,您会写:"柠檬,橙子,草莓,葡萄"
,即使用逗号。
因此,在函数中使用逗号分隔参数比使用其他字符(例如 | )更自然。
考虑:
someFunction( name, age, location )
vs.
一些函数( 名称|年龄|位置 )
为什么他们不只使用空格呢?
这是可能的。 Lisp就是这样做的。
主要原因是,空格已经被用来分隔标记,不需要再分配额外的功能。
这不是真的。有些语言不使用逗号。在编程构造之前,函数已经是数学概念,因此一些语言保留了旧的符号表示法。而大多数新语言都受到C语言的启发(例如Javascript、Java、C#和PHP),它们共享一些形式规则,如逗号。