-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)を1つのリストで表し、データをペアのリストのリストとして処理することをお勧めします。

(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 に答える