关于语法:为什么不将运算符作为关键字和函数?

Why not have operators as both keywords and functions?

我看到这个问题,不禁感到疑惑。

忽略了几乎所有语言都必须向后兼容的事实,我们是否有任何理由不能同时使用操作符作为关键字和函数,这取决于它是否紧跟在括号后面?这会使语法更难吗?

我主要考虑的是Python,也包括C语言。


Perl做了与此非常相似的事情,结果有时令人惊讶。您将在许多Perl文本中发现有关此问题的警告;例如,此警告来自标准的分布式Perl文档(man perlfunc)。

Any function in the list below may be used either with or without parentheses around its arguments. (The syntax descriptions omit the parentheses.) If you use parentheses, the simple but occasionally surprising rule is this: It looks like a function, therefore it is a function, and precedence doesn't matter. Otherwise it's a list operator or unary operator, and precedence does matter. Whitespace between the function and left parenthesis doesn't count, so sometimes you need to be careful:

1
2
3
4
5
     print 1+2+4;      # Prints 7.
     print(1+2) + 4;   # Prints 3.
     print (1+2)+4;    # Also prints 3!
     print +(1+2)+4;   # Prints 7.
     print ((1+2)+4);  # Prints 7.

更令人惊讶的是,新来者经常受到攻击:

1
2
 print
      (a % 7 == 0 || a % 7 == 1) ?"good" :"bad";

将打印0或1。

简而言之,这取决于你的解析理论。许多人认为解析应该是精确的和可预测的,即使这会导致令人惊讶的解析(如在链接问题中的Python示例中,或者更著名的是C++最令人烦恼的解析)。其他人倾向于Perl的"做我想做的"哲学,尽管结果——如上所述——有时与程序员实际的意思有很大的不同。

C、C++和Python都倾向于"精确的和可预测的"哲学,他们现在不太可能改变。


根据语言的不同,未定义not()。如果在某些语言中没有定义not(),则不能使用它。为什么不在某些语言中定义()?因为该语言的创建者可能不需要这种类型的语言构造。因为最好让事情简单一点。