Schemeと他のLisp言語のリストの構造は、コンスセルに基づいています。
+-+-+
|1|----+
+-+-+ |
+-+-+
|2|---+
+-+-+ |
+-+-+
|3| |
+-+-+
最終短所セル、各短所セル値(car
)とリストに、このような次のコンス・セル(cdr
、顕著参照-DAR)へのポインタを含みますリストの終わりは、ゼロを含んでいます。 Schemeの表記では、短所-セルは次のようになります。
(1 . 2)
だからリストは、任意のシンタックスシュガーせずに、次のようになります。
(1 . (2 . (3 . (4 . nil))))
空のリスト、コンス・セルで構成されています
(nil)
空リストにはcar
がありません。空リストはnilのように扱われますので、これは次のようになります。
(1 . (2 . (3 . (4 .()))))
前のように動作します。あなたは糖衣構文を使用する場合
は今、リストは次のようになります。
(1 2 3 4)
しかし、根本的な構造は同じです。したがって、空リストがあるかどうかを調べるには、それがnilかどうかをテストします(どのSchemeがempty?
関数で実行するか)。そのため、リストの車のempty?
を呼び出す代わりに、間違った考え方とエラーがある場合は、リストで呼び出してください。だからあなたの関数は次のようになります。リストには、一つだけ、あるいは全くの要素を持っている場合、それはチェック:第二のアームは、あなたのコメントが言うように、リストは、空であることをないチェックを行うこと
(define (min list)
(cond ((empty? list "It is empty"))
((empty? (cdr list)) (car list))
((< (car list) (min (cdr list))) (cdr list))
(else (min (cdr list)))))
は注意してください。あなたのcdrが空で、車がない場合(2番目の腕が許す)、1つの要素リストがあります:
(foo .())
これは役に立ちます。
特定の機能を向上させる方法の詳細については、Oscar Lopez's answer to this questionを参照してください。
リストの最初の要素( 'car')が空であるかどうかチェックしますか?または、リストが空であるかどうかチェックしたいですか?リストが空の場合、最初の要素をリストから取り出すことはできません。まず、リストが空であるかどうかをチェックする必要があります。それが空でなければ、最初の要素を取ることができます。例: '(if(pair?some-list)(car some-list))'。何かがペアであれば、最初の要素を取ることができます。そうでなければ。 – ceving