我目前正在做一个名为aunt-names的球拍创建功能。该函数的目的是接受一个人结构和一个人结构列表,并返回该人的所有阿姨的名字的排序列表。我不太确定如何启动该功能,但已经完成了这些有助于该功能的功能:
女性列表功能
(define (female-list flist)
(cond [(empty? flist) empty]
[(equal? 'female (person-sex (first flist)))
(cons (first flist)
(female-list (rest flist)))]
[else (female-list (rest flist))]))
兄弟?功能
(define (sibling? personA personB)
(cond [(equal? personA personB) false]
[(equal? (person-father personA) (person-father personB)) true]
[(equal? (person-mother personA) (person-mother personB)) true]
[else false]))
答案 0 :(得分:0)
这看起来是一个好的开始。在编写阿姨姓名的主体之前,这里有一些关于更多辅助函数的想法可能会有用:
(female? personA)
:如果personA的性别为女性,则返回true (parent-of? personA personB)
:如果personA是personB的父亲或母亲,则返回true (aunt-or-uncle-of? personA personB)
:如果personA是personB的阿姨或叔叔,则返回true (aunt-of? personA personB)
:如果personA是personB的阿姨,则返回true (aunt-or-uncle-list personA people-list)
:返回人物结构列表,其中每个人都是personA的阿姨或叔叔(每个人最初都在人员列表中)。(aunt-list personA people-list)
:返回人物结构列表,其中每个人都是personA的阿姨(每个人最初都在人员列表中)。 (注意这与aunt-names不同,因为它返回整个person-structs而不仅仅是名字,并且它不会对它们进行排序。)这些可以相互构建,也可以构建在已有的辅助函数上。这可能看起来像许多微小的功能,但这样每一个都会非常清晰,如果出现问题,你可以单独测试它们。
另一种策略是首先开始编写主函数体(aunt-names
),然后假装你想要使用的任何辅助函数已经存在。例如,在编写female-names
时,您可以将其分解为:
(define (female-list flist)
(cond [(empty? flist) empty]
[(female? (first flist)) ; TODO: go back and write "female?"
(cons (first flist)
(female-list (rest flist)))]
[else (female-list (rest flist))]))