Обнаружена ошибка в Racket v5.1.1? - PullRequest
2 голосов
/ 19 июня 2011

Кто-нибудь, пожалуйста, скажите мне, что это ошибка в Racket (v5.1.1),

Кажется, это проблема с областью видимости.

(см. Код и вывод ниже)

Возвращение из примера-1 показывает, что x увеличивается не так, как должно и как в примере-2 и примере-3.

Функция example-2 является просто копией example-1 с удаленной инструкцией обратного вызова из doit.

Функция example-3 (как вы можете видеть) также является копией, ноимеет дополнительный параметр, который сам по себе ничего не меняет, но когда я проверяю его значение в выражении cond, он показывает x как приращенный.

Кроме того, если я ничего не возвращаю из примера-1, а скорее напечатаюто, что он теперь возвращает, показывает х как приращенный.

(define (example-1 lst)
  (letrec([x       0]
          [doit    (lambda ()
                     (reverse 
                      (foldl  
                       (lambda (v store)
                         (set! x (add1 x))
                         (cons v store))
                       '()  
                       lst)))])

    (let*([results   (doit)])
      (list x results)
      )))

(define (example-2 lst)
  (letrec([x       0]
          [doit    (lambda ()
                     (foldl  
                      (lambda (v store)
                        (set! x (add1 x))
                        (cons v store))
                      '()  
                      lst))])

    (let*([results   (doit)])
      (list x results))))

(define (example-3 lst id)
  (letrec([x       0]
          [doit    (lambda ()
                     (reverse 
                      (foldl  
                       (lambda (v store)
                         (set! x (add1 x))
                         (cons v store))
                       '()  
                       lst)))])

    (let*([results   (doit)])
      (cond   [(= 1 id)  'junk])
      (list x results)
      )))

(printf "example-1 : ~a~n"  (example-1 '(a b c)))
(printf "example-2 : ~a~n"  (example-2 '(a b c)))
(printf "example-3 : ~a~n"  (example-3 '(a b c) 1))

вывод:

example-1 : (0 (a b c))
example-2 : (3 (c b a))
example-3 : (3 (a b c))

1 Ответ

3 голосов
/ 19 июня 2011

Это ошибка - Я подал с более простой версией вашего кода. (Хотя это не связано с джитом.)

Редактировать: ошибка исправлена ​​ сейчас.

...