【问题标题】:Access a struct-field if the struct is part of a list如果结构是列表的一部分,则访问结构字段
【发布时间】:2019-11-22 12:36:06
【问题描述】:

所以我是 Racket 的新手,我正在尝试编写一个将元素添加到优先级队列的函数。因此,我需要访问一个结构的结构字段,它是一个列表的头部(在这种情况下,该列表称为 lst)。

(define-struct abc (element p))

(define (function lst e)  
  (cond  
    [(and (abc? e) (> (**first lst-p**) e-p)) (...

e 必须是 abc 类型,以便我可以比较字段 p。我知道我可以通过编写e-p 访问ep,但我不知道如何访问列表中第一个元素的p(列表仅包含结构@ 987654329@)。

我希望有人能提供帮助。谢谢!

【问题讨论】:

  • 请使用有意义的变量名

标签: list struct field racket


【解决方案1】:

我知道我可以通过写 e-p 来访问 e 的 p

当你定义一个结构体时,Racket 定义了像abc-p 这样的辅助函数,所以仅仅写e-p 是不够的(它在那个上下文中是未绑定的);您必须将abc-p 应用于您要从中获取值的对象:

(abc-p (abc 10 20))
=> 20

我不知道如何访问列表中第一个元素的 p

你需要阅读Racket Reference: 4.9 Pairs and Lists,列表在Racket中被定义为cons-cells链:一个cell有两个slot,由于历史原因,命名为carcdr,其中car用于存储值,cdr 指向另一个 cons-cell,或空列表'()

要访问名为lst 的列表的第一个元素,您可以编写(car lst)。请注意,如果在 Racket 中的空列表上调用它是错误的(在 Scheme 中更普遍),那么您首先需要使用 null? 检查列表是否为空。

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2019-07-10
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多