如何递归遍历列表列表并以不同方式组合列表

时间:2016-09-26 01:34:47

标签: list dictionary recursion scheme traversal

这是message passing docs的后续行动。

我将列表或“记录”附加到一个空列表中,每个列表的格式为(Matthew (AL 21 32))。我现在正在尝试编写一个函数,它将使用fetchRecord来查找所需的记录,然后将记录中的两个数字相乘。但是,我的当前代码只有在第一条记录上获取名称时才有效,但在此之后它会为任何记录返回一个空列表。这是我的代码:

(define (Mult_Num name)
  (cond
    [(empty? db) #f]
    [else (* (car(cdr(car(cdr (fetchRecord name)))))
             (car(cdr(cdr(car(cdr (fetchRecord name)))))))]))

我该如何解决这个问题?此外,如果某个记录有两组数据如下:(John (AL 25 40) (CA 40 67))那么你如何获得25 * 40和40 * 67等,即使它有两组以上的数据?我知道这将是递归,但我不太确定你将如何设置它。

这是我的fetchRecord函数:

(define (fetchRecord name)
  (cond
    [(empty? db) #f]
    [(equal? (car (car db)) name) (car db)]
    [else( car (car db)) name (cdr db)]))

这也可能是相关的:

(define db '())

我也有这个,但如果我在这里有两个以上的名字,那就搞砸了:

 (define(showRec name) ;displays everything following a name. 
  (cond
    [(empty? db) #f]
    [(equal? (car (car db)) name) (cdr (fetchRecord name))]
    [else (cdr (car(fetchRecord name)))])
  )

1 个答案:

答案 0 :(得分:0)

主要问题是你依赖fetchRecord这不仅不起作用,而且是无效的方案:else子句应该只有1个参数,而不是3个。

当使用递归来处理列表的rest的函数在不使用递归时不会处理列表的rest时,你不应该感到惊讶。 / p>