如果结构是列表的一部分,则访问结构字段

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

(define-struct abc (element p))

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

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

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

michaelmars 回答:如果结构是列表的一部分,则访问结构字段

  

我知道我可以通过写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,列表在球拍中定义为cons-cell链:一个单元有两个插槽,出于历史原因,它们分别名为carcdr,其中{ {1}}用于存储值,car指向另一个约束单元或空列表cdr

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

本文链接:https://www.f2er.com/3050906.html

大家都在问