2009-06-25 37 views

回答

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

應該這樣做。

+1

我得到了一個錯誤「編譯:綁定標識符(無#%頂語法變壓器必將)在:+」 – unj2 2009-06-25 18:04:47

+0

什麼方案的版本?我在發佈之前在博士計劃中測試了這個 – 2009-06-25 18:33:09

+0

這很有趣。該聲明本身不會編譯。它需要在一個函數中,或者可以在REPL中進行評估。是否存在對eval綁定的限制? – unj2 2009-06-25 18:59:10

2

'apply'如何?使用變量+而不是符號+。

(apply + '(1 2 3)) 

R5RS

0

怎麼樣的計劃 「應用」

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

我希望那是什麼你問:)

4

在R5RS你需要

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

「相當大的」路線博士語言允許:

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

順便說一句,這是怎麼回事這個‘語法高亮’?

1

球拍的方案將是

#lang scheme 

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