6

これは私の前の質問のフォローアップです:なぜ nil が必要なのですか? 明らかに、ほとんどの場合適切なリストが使用されます。しかし、不適切なリストの目的は何ですか?

4

4 に答える 4

8

正当な理由はありません。不適切なリストが真に適しているのは、連想リストの構文の一部としてだけです。その場合でも、キーと値のペアのカスタム構文の方が適しています。考えられる不適切なリストの使用法はすべて、レコード型でより適切に実装できます — 結局、これはリストを包含します: レコードに関して Lisp リストを定義することはできますが、その逆はできません (リストでは定義できないため)。型が言語の他のすべての型から切り離されているデータ構造)。

すべてのタイプのデータを表現するためにペアとリストを乱用することを、私はLisp プログラマー病と呼んでいます。非常に多くの Lisp 支持者がそれを支持しているのは本当に残念です。私はそのようなものを何度もクリーンアップしなければなりませんでした。

于 2012-01-30T23:11:28.930 に答える
4

不適切なリストの存在は、基本的なビルディング ブロックconscar、およびの存在の自然な結果ですcdr。これら 3 つがあらゆる種類のより複雑なデータ型の基礎を形成するのは、Lisp の中心です。どういうわけか、追放の不適切なリストを選び出すには、恣意的な制限を課す必要があります。

于 2012-01-30T20:39:42.253 に答える
1

「不適切なリスト」は、 を使用して作成されたリスト以外のデータ型を指すあいまいな用語ですcons

John が言うように、1 つの例は、consML でタプルを使用するのと同じ方法でペアを使用することです。

別の例は、リストのバリエーションです。たとえば、次のようにストリームを定義できます。

;; A Stream-of-X is one of
;;   - null, ie '()
;;   - (cons X Stream-of-X)
;;   - a procedure taking no arguments and returning a Stream-of-X result

;; nats-from : nat -> Stream-of-nat
(define (nats-from n)
  (cons n (lambda () (nats-from (+ n 1)))))
于 2012-01-30T20:56:01.730 に答える