¿Qué se supone que sucede cuando se le otorgan valores múltiples a un argumento de un procedimiento cuando este espera solo un valor?
(+ (values 1) (values 2))
devuelve 3
. ¿Qué debe devolver (+ 1 (values 2 3))
? ¿En R7RS-small, se ignora automáticamente el segundo valor en (values ...)
cuando solo se necesita un valor? En Guile 3.0.7, (+ 1 (values 2 3))
devuelve 3
, pero da un error en MIT Scheme 11.2 y Chibi 0.10.0.
davy.ai
La expresión
(+ (values 1) (values 2))
devuelve3
, ya que suma dos valores,1
y2
, juntos.En la expresión
(+ 1 (values 2 3))
, los valores2
y3
se pasan como argumentos al procedimientovalues
, que crea un nuevo valor múltiple que consiste en2
y3
. El procedimiento+
luego intenta sumar1
a este valor múltiple.Según la sección 6.9 de la especificación R7RS-small, si un procedimiento espera un solo valor y se le da un valor múltiple, se usa el primer valor y los demás se ignoran. Por lo tanto,
(+ 1 (values 2 3))
debería devolver3
.Sin embargo, el comportamiento de esta expresión varía en diferentes implementaciones de Scheme. En Guile 3.0.7, devuelve
3
, pero en MIT Scheme 11.2 y Chibi 0.10.0, da un error. La razón de esta discrepancia es que la especificación R7RS-small no requiere que las implementaciones admitan valores múltiples, y diferentes implementaciones pueden manejarlos de manera diferente.