球拍功能叫做阿姨名字

时间:2014-03-15 18:09:35

标签: function sorting racket

我目前正在做一个名为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]))

1 个答案:

答案 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))]))