make-function来自哪里?

时间:2015-06-30 19:08:36

标签: racket

此代码有效:

(define list-of-events 
  (for/list ([(date code)
              (in-query odc "select date, code from attendance
                             where student_id = ? and term_code = ?"
                        "12345" "654321")])
    (make-attendance-event date code)))

但是,当我尝试复制另一个表的行为时,make-attendance-event的并行项会抱怨它是一个“未绑定的标识符”。

现在,考勤事件来自哪里?

2 个答案:

答案 0 :(得分:5)

标识符make-attendance-event来自(define-struct attendance-event (...))

结构定义,例如

(define-struct foo (a b))

将扩展为多个定义。

  1. make-foo将构建foo-structures
  2. foo-a,foo-b字段访问者
  3. FOO?一个可以确定值是否为foo的谓词
  4. 在高级语言中,您还可以获得:

    1. set-foo-a!,set-foo-b!改变各自的领域。
    2. 在此处查看更多内容:http://docs.racket-lang.org/htdp-langs/advanced.html?q=define-struct#%28form._%28%28lib._lang%2Fhtdp-advanced..rkt%29._define-struct%29%29

      请注意,您可以将鼠标悬停在DrRacket中的标识符make-attendance-event上,右键单击并选择"跳转到绑定事件"查看标识符的定义位置。

答案 1 :(得分:1)

make-attendance-event是在Racket文件中的其他位置定义的函数。它不是库函数。