【问题标题】:Order of evaluation in scheme方案中的评估顺序
【发布时间】:2011-02-11 14:36:28
【问题描述】:

这是有效的:

(define obj1 (maak-object (coord 1 1) #f #f #t))
(set! karaktersenobjectenlijst (append karaktersenobjectenlijst
                                  (list (list 'object obj1)))))

> (cadar karaktersenobjectenlijst)
obj1
> (positie obj1)
{1 . 1}

这不起作用:

> (positie (cadar karaktersenobjectenlijst))
. . vector-ref: expects type <vector> as 1st argument, 
. .   given: obj1; other arguments were: 0

当评估(cadar karaktersobjectenlijst) 时,如何让它使用值obj1

【问题讨论】:

  • 什么是maak-objectpositie
  • (define (maak-object positie blokkerend?breekbaar?water?) (vector object-tag positie blokkerend?breekbaar?water?))
  • (define (positie k) (cond ((karakter?k) (vector-ref k 6)) ((object?k) (vector-ref k 1))))
  • 您能更具体地了解您正在编写的程序吗?这里有很多未定义的变量:object-tagkarakter?coordkaraktersenobjectenlijst。为它们提供看似合理的值并不会产生您所看到的结果。
  • 这是什么方案系统?我最怀疑打印为“obj1”的值。此外,“cadar”将从 karaktersenobjectenlijst 的第一个元素中进行选择;如果它不是空的,那么你添加的东西没有任何区别。山姆是对的;这里有太多危险的东西,无法理解这个请求。

标签: scheme racket operator-precedence r6rs


【解决方案1】:

代码是正确的。我已经用一些假人替换了你的函数,它的评估结果很好:

(define coord cons)
(define maak-object list)
(define positie car)

(define obj1 (maak-object (coord 1 1) #f #f #t))
(define karaktersenobjectenlijst '())
(set! karaktersenobjectenlijst (append karaktersenobjectenlijst
                                       (list (list 'object obj1))))
(cadar karaktersenobjectenlijst)

(positie obj1) #-> (1 . 1)
(positie (cadar karaktersenobjectenlijst)) #-> (1 . 1)

问题一定出在您的库代码或您使用它的方式上。方案评估工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多