-4

假设我们得到了一个这样的列表(包含更多元素,但方法应该相同):

(define l '((cons 'name 'john)
            (cons 'sur 'asurname)
            (cons 'name 'george)
            (cons 'sur 'georgesurname)))

我们总是可以在现有列表中添加更多元素。这是最有效的方法,可以说编写一个获取用户名并返回姓氏的函数:

就像是 :

(define display-surname
  (lamdba (name)
   (...)))

在这种情况下,一般做法是什么?谁能指出一个如何做的例子/链接?

4

1 回答 1

2

(name,surname)将每条记录表示在一个列表中会更好,然后将您的数据作为对列表的列表进行处理:

(define lst '(((name . a) (sur . b)) ((name . c) (sur . d))))

使用上面的表示,找到一个名字(给定一个姓氏)就这么简单(假设记录中的每个字段总是在相同的位置找到):

(define display-surname
  (lambda (lst name)
   (cond ((null? lst) #f)
         ((eq? (cdaar lst) name) (cdadar lst))
         (else (display-surname (cdr lst) name)))))

您可以通过如下表示上述数据来进一步简化事情(再次假设记录中的每个字段始终位于相同的位置),并在 中进行相应的更改display-surname

(define lst '((a . b) (c . d)))

(define display-surname
  (lambda (lst name)
   (cond ((null? lst) #f)
         ((eq? (caar lst) name) (cdar lst))
         (else (display-surname (cdr lst) name)))))

无论哪种方式,这都有效:

(display-surname lst 'a)
> 'b

(display-surname lst 'x)
> #f
于 2012-05-12T01:35:18.810 回答