¿Por qué en lisp (Emacs Lisp y Scheme como sé) construcción como (*)
devuelve 1
?multiplicación de lista vacía en emacs lisp
¿Qué multiplico aquí? ¿Cómo puedo llamar a esta función *
sin argumentos?
¿Por qué en lisp (Emacs Lisp y Scheme como sé) construcción como (*)
devuelve 1
?multiplicación de lista vacía en emacs lisp
¿Qué multiplico aquí? ¿Cómo puedo llamar a esta función *
sin argumentos?
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.
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
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' + '())'. –
'(* (+ (*) (*) (*)) (+ (*) (*) (*) (*) (*) (*)) (+ (*) (* (+ (*) (*) (*) (*)) (+ (*) (*) (*)) (+ (*) (*) (*))))) ' –
@EliBarzilay: es que el sexpr de la Bestia? –
larsmans, gracias por su respuesta clara. – karasiov