arguments.callee в Ракетке (Схема)?

1

Мне нужна функция arguments.callee JavaScript в Racket (Scheme). Ты знаешь как?

Вот пример в JavaScript

function makeFactorialFunc() {
 return function(x) {
   if (x <= 1)
     return 1;
   return x * arguments.callee(x - 1);
 };
}
  • 2
    Обратите внимание, что arguments.callee недоступен в строгом режиме JavaScript. По той же причине эта функция недоступна в схеме / ракетке. (Это затрудняет эффективную компиляцию) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 0
    Спасибо за комментарий. Я думаю, что arguments.callee полезен, когда вам нужно динамически обернуть скрипт в функции и вызвать эту новую функцию рекурсивным способом.
Теги:
scheme
arguments
racket

1 ответ

3
Лучший ответ

Вы не можете получить текущую исполняемую функцию динамически в Racket, но вы, безусловно, можете реализовать функцию в своем вопросе в Racket, просто указав ей имя:

(define (make-factorial-func)
  (define (func x)
    (if (<= x 1)
        1
        (* x (func (- x 1)))))
  func)

Возможно, вы чувствуете, что по какой-то причине вам нужна динамическая arguments.callee, и можно достичь этой цели с помощью какого-то другого механизма, но, видя, что вы не предоставляете никакого контекста, почему вы считаете его необходимым в своем вопрос, я не могу догадаться, что это за другой механизм.

  • 0
    Можно также использовать SRFI-31 rec

Ещё вопросы

Сообщество Overcoder
Наверх
Меню