繁体   English   中英

替换球拍中结构的元素

[英]Replace elements of a struct in Racket

假设我们有以下表达式(band'x(bor'y'z)),其中band和bor布尔结构分别具有arg1和arg2。

如果我想通过表达式的深度递归将变量'x和'y更改为'a和'b,我该怎么做?

有一种特殊的形式可以在功能上更新结构中的某些字段,如果您有很多字段,可以很好地使用它:

(struct person (name age occupation) #:transparent)
(define p (person "Per" 19 "Painter"))

(define (change-occupation p new-occupation)
  (struct-copy person p [occupation new-occupation]))

(change-occupation p "Programmer") ; ==> (person "Per" 19 "Programmer")

当然,这只是一种奇特的书写方式:

(define (change-occupation p new-occupation)
  (person (person-name p)
          (person-age p)
          new-occupation))

现在,我不知道您的两个结构的名称,但是您可能需要创建一个通用的访问器,除非一个是另一个的子类型:

(define (change-first obj new-value)
  (if (band? obj)
      (band new-value (band-second obj))
      (bor new-value (bor-arg2 obj))))

或者,您也可以在过程中进行类似的案例分析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM