2009-06-25 13 views

risposta

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

Dovrebbe farlo.

+1

ho ottenuto un errore "compilare: identificatore non legato (e no #% trasformatore di sintassi superiore è legato) in: +" – unj2

+0

quale versione di schema? L'ho provato in Dr. Scheme prima di postare –

+0

Questo è interessante. la dichiarazione di per sé non verrà compilata. Deve essere all'interno di una funzione o può essere valutato nella REPL.Esiste restrizioni sull'associazione per quanto riguarda l'eval? – unj2

2

Che ne dici di "applicare"? Usa la variabile + al posto del simbolo +.

(apply + '(1 2 3)) 

R5RS

+1

L'OP desidera in particolare sapere come convertire un simbolo in una procedura. Usare semplicemente + anziché '+ non risponde alla domanda. – mgadda

+0

@mgadda: come puoi vedere, ha aggiunto quel requisito in seguito. –

+0

Tranne no. La domanda originale non modificata si riferisce al simbolo '+. La modifica ribadisce semplicemente che si tratta di un simbolo e non fornisce modifiche alla domanda originale. – mgadda

0

Come circa il sistema di "applicare"

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

Spero che era quello che stavi chiedendo :)

+0

Salve la cosa è + è in termini di un simbolo '+ e non una procedura. Applica non funziona. – unj2

+0

AHHHH, mi dispiace, non ho visto l 'prima del tuo + !!! Il mio male – micmoo

4

In R5RS è necessario

(apply (eval '+ (scheme-report-environment 5)) '(1 2 3)) 

Il " Abbastanza grande" lingua in Dr. schema permette di:

(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* 

Btw, qual è il problema con questo "evidenziazione della sintassi" ??

1

Nello schema di Racket sarebbe

#lang scheme 

(define ns (make-base-namespace)) 
(apply (eval '+ ns) '(1 2 3)) 
Problemi correlati