Esiste un modo per applicare "+ a" (1 2 3)?Come si applica un simbolo come funzione in Scheme?
modifica: quello che sto cercando di dire è che la funzione che ottengo sarà un simbolo. C'è un modo per applicarlo?
Grazie.
Esiste un modo per applicare "+ a" (1 2 3)?Come si applica un simbolo come funzione in Scheme?
modifica: quello che sto cercando di dire è che la funzione che ottengo sarà un simbolo. C'è un modo per applicarlo?
Grazie.
(apply (eval '+) '(1 2 3))
Dovrebbe farlo.
L'OP desidera in particolare sapere come convertire un simbolo in una procedura. Usare semplicemente + anziché '+ non risponde alla domanda. – mgadda
@mgadda: come puoi vedere, ha aggiunto quel requisito in seguito. –
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
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))
;; 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" ??
Nello schema di Racket sarebbe
#lang scheme
(define ns (make-base-namespace))
(apply (eval '+ ns) '(1 2 3))
ho ottenuto un errore "compilare: identificatore non legato (e no #% trasformatore di sintassi superiore è legato) in: +" – unj2
quale versione di schema? L'ho provato in Dr. Scheme prima di postare –
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