Для +
и *
неявный первый аргумент по умолчанию - это элемент идентификации для представляемых ими математических операций, которые представляют собой операции сложения и умножения в различных числовых полях. Для +
это 0
, который является элементом идентификации для группы сложения по числам; для *
это 1
, который является единичным элементом для умножения на числа.
Итак
(+)
равен (+ 0)
равен 0
; (+ 1)
это (+ 0 1)
это 1
; (*)
это (* 1)
это 1
; (* 2)
это (* 1 2)
это 2
.
Для -
и /
неявные аргументы по умолчанию являются соответствующими идентификаторами операций, для которых они также являются обратными, хотя для этих функций требуется как минимум один аргумент и их поведение с более чем одним аргументом не так просто.
Так что
(-)
- ошибка (я не понимаю, почему это не должно быть 0
); (- 1)
равно (- 0 1)
равно -1
; (- 1 2)
равно не (- 0 1 2)
; (/)
ошибка (Я не понимаю, почему это не должно быть 1
); (/ 2)
это (/ 1 2)
это 1/2
; (/ 3 2)
это не (/ 1 3 2)
.
Если быть точным, в контексте схемы аргументами по умолчанию являются * 107 1 * точные числа, представляющие тождества, я думаю.
Обратите внимание, что эти аргументы по умолчанию просто выбраны для математического удобства: это не является чем-то присущим структуре языка. Я мог бы определить язык, где (+)
было "foo"
, хотя, вероятно, это был бы не очень полезный язык.