2009-04-02 7 views
5

私は今Common Lispを学び始めました - そしてすぐにそれに恋しています - そして私はちょうどタイプシステムに移りました。私はアプリケーションプログラミングのために特別な好奇心を発達させているようです。応用プログラミングと共通のlispタイプ

私が理解しているように、CLの文字列とリストはどちらのシーケンスでもありますが、シーケンス上のマッピングのための標準機能はないようです。基本的なデータ型であることを理由にリストに提供される理由はわかりますが、シーケンスで動作するように設計されていないのはなぜですか?より一般的な型であるため、リストではなくアプリケーション関数を対象とする方が便利です。あるいは、私はそれがどのように機能するか完全に誤解していますか?

編集:私はシーケンス方法だったについては特に混乱して感じていた何

- 抽象化 - とリスト - 実装が - CLにまで混乱しているようです。コンセンサスはこれが歴史的な理由によるものだと思われる。 lispは長年にわたり、関数やマクロを使ってソフトウェアエンジニアリングの実践をかなり詳しく描くことができます。この関数はシーケンスに適用され、リストにはリスト上でのみ動作するプリシーケンス抽象関数と、より一般的なやり方でシーケンスで機能する関数が混在しているため、現時点でCLを学んでいる人物として、著者が最初にクリーンな抽象化としてシーケンスを導入し、その抽象化の最も基本的な実装としてリストで購入するのが有益であると思います。リストはもちろん構文として必要ですが、明示する必要がある時には、多くの読者がこれを自分で作業していました。これは、起動時にかなり自励的になります。

答えて

1

まあ、あなたは一般的に正しいです。ほとんどの機能は、実際に(心に来るconcatenatesomeevery)これらのいくつかのための配列のための同等の機能がある(mapcarfindcountremoveappendなど)のリストに焦点を当て、およびいくつかのん、どこリスト相当(リストの場合はnth、すべてのシーケンスの場合はelt)。いくつかの関数はシーケンス(例えば、length)で動作します。

CLはちょっと混乱しています。 のように大きな言語です。です。 700以上の機能、AFAIK。それは古いです。これらの関数の中には、慣例によって非難されるものもあれば、これまで使用されていないものもほとんどありません。

はい、すべてのシーケンスで意図したとおりに適用されるマッピング関数をメソッドにすると便利です。 CLは単にそのように構築されていませんでした。それが今日再び建てられるならば、私はこれが考慮されると確信しており、は非常にと異なって見えるでしょう。

しかし、あなたは完全に寒いままではありません。 loopマクロはシーケンスに作用し、iterate(別のループマクロ、これはもっと好きです)。これは遠くにあなたを得るでしょう。ほとんどの実用的な目的のために、あなたはリストを使用しますが、これは実用的な問題以上のものではありません。ベクタ(または一般的なシーケンス)のマッピング関数が不足している場合は、誰がそれを書かないようにしますか?

+5

シーケンスでCOUNT、FIND、REMOVEを正常に削除できます。 ANSI CL標準のシーケンス辞書を確認してください。 –

+0

まあまあ、あなたは何を知っていますか?そこに自分より先に少し話してください。ありがとう! –

+0

あなたは自分より先に話しているかもしれませんが、私に必要な答えをくれました。私が混乱していたのは、一般的なケースとしてのシーケンスと実装としてのリスト間の抽象化がCLで非常に混乱しているように見える理由でした。今私はそれが歴史的な理由であることを知っています。ありがとう! –

関連する問題