¿Hay alguna manera de aplicar "+ a" (1 2 3)?¿Cómo aplico un símbolo como una función en Scheme?
editar: lo que estoy tratando de decir es que la función que obtengo será un símbolo. ¿Hay alguna manera de aplicar eso?
Gracias.
¿Hay alguna manera de aplicar "+ a" (1 2 3)?¿Cómo aplico un símbolo como una función en Scheme?
editar: lo que estoy tratando de decir es que la función que obtengo será un símbolo. ¿Hay alguna manera de aplicar eso?
Gracias.
(apply (eval '+) '(1 2 3))
Debería hacerlo.
El OP específicamente quiere saber cómo convertir un símbolo en un procedimiento. Simplemente usar + en lugar de '+ no responde la pregunta. – mgadda
@mgadda: como puede ver, estaba agregando ese requisito más adelante. –
Excepto no. La pregunta original sin editar se refiere al símbolo '+. La edición solo reitera que es un símbolo y no proporciona modificaciones a la pregunta original. – mgadda
En R5RS necesita
(apply (eval '+ (scheme-report-environment 5)) '(1 2 3))
El " Bastante grande" en el lenguaje Dr. esquema permite:
(apply (eval '+) '(1 2 3))
;; This works the same as funcall in Common Lisp:
(define (funcall fun . args)
(apply fun args))
(funcall + 1 2 3 4) => 10
(funcall (lambda (a b) (+ a b) 2 3) => 5
(funcall newline) => *prints newline*
(apply newline) => *ERROR*
(apply newline '()) => *prints newline*
Por cierto, ¿qué pasa con este 'resaltado de sintaxis' ??
En el esquema de la raqueta sería
#lang scheme
(define ns (make-base-namespace))
(apply (eval '+ ns) '(1 2 3))
me dio un error "compilar: identificador no unida (y no #% transformador de la parte superior de sintaxis está obligado) en: +" – unj2
qué versión de esquema? Probé eso en Dr. Scheme antes de publicar –
Esto es interesante. la declaración en sí misma no compilará. Necesita estar dentro de una función o puede evaluarse en REPL. ¿Existen restricciones para la vinculación con respecto a eval? – unj2