2012-05-11 4 views
-4

を含むリストを検索しますリスト。最も効果的な方法は、ユーザーの名前をとり、姓を返す関数を書くことを言うことができますこれは:のようなは、我々は(はるか要素とが、方法は同じである必要があります)、このようなリストを持っていると言うことができますリストやコンス

何か:

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

このような場合の一般的な慣行とは何ですか?誰かがどのように例/リンクを指すことができますか?

+0

: リストはテキストファイルに保存されます。連絡先を追加する手続きがあります。すべての連絡先には(名前、姓、電話番号、メールアドレス)があります。ファイルのオープンと書き込みは問題ではありません。それは単純なリストではないので、私はいくつかの情報/リンクを私にソリューションを表示しないようにしたいと思います。 リストはいつでも展開することができますので、単純な(car l)は私が探しているものではありません。確かにそれは車とcdrsである。しかし、ネストされたリストのテクニックはありますか? – yaku

+0

私は、あなたが ''((名前は主よ)(sur。Piggles)(名前はCaptain)(sur。あなたの現在の例は少し引用符を誤って使用しているようです? – ikdc

+0

@Arafinweはい正しいです、私の悪い、それは私が言います。 – yaku

答えて

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))))) 

あなたも、さらに物事を単純化することができます(再度、レコードの各フィールドは常にあると仮定同じ位置に)、上記のd ATA 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))))) 

いずれかの方法は、この作品:HERESにいくつかの追加情報:マイナスを置くために時間を持っていますが応答しない人のために

(display-surname lst 'a) 
> 'b 

(display-surname lst 'x) 
> #f 
関連する問題