它不是那样实现的,因为数学不是那样工作的。
在数学中:
note: the following is math on a blackboard, not a programming language
+ -5 = -5
- -5 = 5
以任何其他方式做这件事会让任何高中毕业的人感到困惑。
显然,以上是相当弱的答案,因为您确实可以在代码中实现 ASCII 字符“+”所采取的操作,以不同于数学。例如,在 Lisp 中,+
运算符不像普通的高中数学那样工作:
;;; Adding two numbers:
+ 1 2
而在 TI 计算器上,它甚至是相反的:
1 2 +
您可能会争辩说,实现+
您在编程语言中描述的方式是有意义的。关于为什么不应该这样做有许多不同的论据,包括最小意外原则、语言应该模拟问题域、这是我们在学校所教的等等。所有这些本质上都是弱论据,因为它们没有不能为机器以+
与数学相同的方式处理提供根本原因。
但事情是这样的,人类是情感动物。我们喜欢熟悉的东西,对与我们所学的东西背道而驰的东西感到畏缩。程序员不喜欢因+
行为与正常不同而感到惊讶。程序员是创建编程语言的人,所以他们以他们的方式实现是有道理+
的。
一个程序员可能不会这样想,或者一小群人可能不会这样想,他们可以自由地创建一种以+
不同方式实现的编程语言。但是他们很难让整个编程社区相信他们所做的事情是正确的。
因此,所有可以反对+
采取行动的论据abs()
本质上都很弱,这并不重要。只要大多数人认为它是正确的,它的+
行为就会与常规数学相同。