2012-01-24 29 views

Respuesta

10

Esta es una convención matemática: el product of an empty sequence of numbers es uno, por definición; tenga en cuenta que uno es el elemento de identidad para la multiplicación (1 × a = a × 1 = a). Esto es conveniente porque puede llamar al * con una cantidad variable de argumentos sin preocuparse por el caso donde no hay argumentos presentes.

De manera similar, la suma de una secuencia de números vacía es cero, el elemento de identidad para la suma. Intente emitir (+) en su prompt de Lisp.

+4

'(* (+ (*) (*) (*)) (+ (*) (*) (*) (*) (*) (*)) (+ (*) (* (+ (*) (*) (*) (*)) (+ (*) (*) (*)) (+ (*) (*) (*))))) ' –

+0

@EliBarzilay: es que el sexpr de la Bestia? –

+0

larsmans, gracias por su respuesta clara. – karasiov

4

Es una propiedad heredada de las matemáticas. Es como además de, puede agregar juntos cualquier número de números, con el caso especial de que al no agregar números juntos obtendrá la suma cero.

Del mismo modo para la multiplicación, si multiplicas una cantidad arbitraria de números, obtendrás el producto. Para que esto funcione sin números, 1 se usa como el valor base (que tiene un nombre elegante en matemáticas, que he olvidado hace muchos años).

Entonces, ¿tiene algún uso práctico para esto en un lenguaje de programación. Sí, como puede llamar a funciones como + y * con un número arbitrario de argumentos, yo diría que sí. Por ejemplo:

(apply '+ '(2 3 4)) => 9 
(apply '+ '(2 3)) => 5 
(apply '+ '(2))  => 2 
(apply '+ '())  => 0 

(apply '* '(2 3 4)) => 24 
(apply '* '(2 3)) => 6 
(apply '* '(2))  => 2 
(apply '* '())  => 1 
+1

Nota: en Scheme, debe eliminar '' '(es decir,' quote') delante del operador para que se ejecuten los ejemplos. Entonces, por ejemplo, '(aplicar + '())' en lugar de '(aplicar' + '())'. –