2009-06-25 26 views

Respuesta

6
(apply (eval '+) '(1 2 3)) 

Debería hacerlo.

+1

me dio un error "compilar: identificador no unida (y no #% transformador de la parte superior de sintaxis está obligado) en: +" – unj2

+0

qué versión de esquema? Probé eso en Dr. Scheme antes de publicar –

+0

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

2

¿Qué tal 'aplicar'? Usa la variable + en lugar del símbolo +.

(apply + '(1 2 3)) 

R5RS

+1

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

+0

@mgadda: como puede ver, estaba agregando ese requisito más adelante. –

+0

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

0

¿Qué tal el esquema de "aplicar"

(apply + `(1 2 3)) => 6 

espero que era lo que pedían :)

+0

Hola, la cosa es + es en términos de un símbolo '+ y no es un procedimiento. Aplicar no funciona. – unj2

+0

AHHHH, lo siento, no vi el 'antes de su + !!! Mi Malo – micmoo

4

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)) 
2

;; 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' ??

1

En el esquema de la raqueta sería

#lang scheme 

(define ns (make-base-namespace)) 
(apply (eval '+ ns) '(1 2 3)) 
Cuestiones relacionadas