es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Common Lisp: ¿Cuál es el valor de retorno de prog2?

Uno esperaría que prog2 difiera de prog1 y progn al devolver el resultado de evaluar la segunda expresión en lugar de la primera y la última, respectivamente.
Sin embargo, el HyperSpec dice algo diferente (énfasis mío):

prog2 evalúa first-form, luego second-form, y luego forms, yielding como su único valor el valor primario yielded por first-form.

Eso significaría que ¡prog2 devolvería lo mismo (y, de hecho, se comportaría mucho) que prog1!

Curiosamente, los ejemplos en HyperSpec confirman el comportamiento esperado en lugar del especificado:

(setq temp 1) =>  1
(prog2 (incf temp) (incf temp) (incf temp)) =>  3
temp =>  4
(prog2 1 (values 2 3 4) 5) =>  2

¿Es esto un error de escritura en la norma o me estoy perdiendo algo más profundo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece haber una discrepancia entre el comportamiento especificado de prog2 según el HyperSpec y el comportamiento esperado basado en los ejemplos proporcionados. Según el HyperSpec, prog2 debería devolver el valor producido por la primera-forma, lo cual contradice el comportamiento esperado de devolver el resultado de evaluar la segunda-forma.

    No está claro si esto es un error tipográfico en el estándar o si hay una explicación más profunda para esta discrepancia. Puede ser necesario realizar una investigación adicional para determinar la causa de esta discrepancia.

Comments are closed.