racket - Racket v5.1.1 中的范围界定错误?

标签 racket

有人请告诉我这是 Racket (v5.1.1) 中的错误,

这似乎是一个范围界定问题。

(请参阅下面的代码和输出)

示例 1 的返回显示 x 不是 按应有的方式增加 在示例 2 和示例 3 中。

函数 example-2 只是 example-1 的副本 从 doit 中删除反向指令。

函数 example-3 (如您所见)是一个副本 也一样,但有一个附加参数,它本身 不会改变任何东西,但是当我测试它的值时 cond 语句显示 x 正在递增。

此外,如果我没有从 example-1 返回任何内容 而是打印它现在返回的内容,它将 x 显示为 正在递增。

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

最佳答案

这是一个错误 -- I filed it使用更简单的代码版本。 (不过,这与 jit 无关。)

编辑:错误是 fixed现在。

关于racket - Racket v5.1.1 中的范围界定错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399999/

相关文章:

racket - 在 Racket 中打印填充的二进制字

scheme - 在方案中使用嵌套的 let 或 let*

package - 仅在未安装时安装 Racket 软件包

functional-programming - 从一棵树中找到最大值

scheme - 反转整数

lambda - 有没有办法在 Racket 中看到 lambda 的主体?

racket - 垂直条可以用作 Racket 中标识符的一部分吗?

lisp - 在 Racket 和racket-sdl 中初始化 SDL 矩形

scheme - 建立一个包含相同 n 项的列表

lambda - 在方案中嵌套 Lambda?