Как применить символ в качестве функции в схеме? - PullRequest
6 голосов
/ 25 июня 2009

Есть ли способ применить «+ к» (1 2 3)?

edit: я пытаюсь сказать, что полученная функция будет символом. Есть ли способ применить это?

Спасибо.

Ответы [ 6 ]

6 голосов
/ 25 июня 2009
(apply (eval '+) '(1 2 3))

Должен это сделать.

4 голосов
/ 25 июня 2009

В R5RS вам нужно

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

Язык «Довольно большой» в Dr. Scheme позволяет:

(apply (eval '+) '(1 2 3))
1 голос
/ 11 июля 2012

В схеме Ракета это будет

#lang scheme

(define ns (make-base-namespace))
(apply (eval '+ ns) '(1 2 3))
1 голос
/ 26 июля 2010

;; 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 голос
/ 25 июня 2009

Как насчет «подать заявку»? Используйте переменную + вместо символа +.

(apply + '(1 2 3))

R5RS

0 голосов
/ 25 июня 2009

Как насчет схемы "подать заявку"

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

Надеюсь, это было то, что вы спрашивали:)

...