1. ホーム
  2. lisp

[解決済み] Common Lispの実践的な使い方を学ぶ場 [終了しました]。

2023-09-12 22:32:01

質問

私はCommon Lispを学ぼうとしているC++プログラマです。Land of Lispのような本を何冊か見たり、Lispの様々な良さについて多くのオンライン記事を読んだりしています。しかし、私はいくつかのアドバイスを必要としています。

私が読んだCommon Lispについてのほとんどすべては、それがいかに素晴らしく、いかに速く物事を成し遂げられるか、そしていかに30年前に現代のプログラミング言語における多くの問題を解決したかについて書かれています。また、マクロがいかにすごいか、あらゆるプログラミングパラダイム(OO、関数型、アクターベースなど)がLispで使えるか、リストがいかに究極のデータ構造であるか、などについても書かれています。基本的にLispは研究言語のように扱われ、それがいかに異質で革命的であるかを語っているのです。

そのようなことはすべて事実でしょうが、問題は、ファイルを読んでそれを単語に分割し、その上で何らかの処理を行うといった実用的なことを行う方法をあまり見たことがないことです。Common Lisp を学ぶためではなく、C++ で行っていたことをより速く、より少ないエラーで行えるようにするために興味があるのです。

そこで、私の質問は を実現するのに最適なリソース(ウェブサイト、書籍、何でも構いません)は何でしょうか? Common Lispを使って一般的なプログラミング作業をする方法を教えることに重点を置いています。 のようなものです。

  • ファイルの読み方
  • ファイルを読み、ファイル内の単語を置換し、結果をファイルに書き戻す方法
  • ディレクトリ内のファイルを反復処理する方法と、その他のファイルシステムに関すること
  • SQL DB とのインタラクション
  • ソケットを使った通信
  • ウェブサーバなどのスレッド化
  • GUI の作成
  • バイナリファイルに対する操作の実行
  • パーサを書く(LispでLispのインタプリタではない、私の理解では5行のLispのようなものである)
  • オペレーティングシステムとの対話 (つまり C や C++ で書かれたもの) で、Lisp がネイティブにできないことを行う。
  • Lisp の拡張を C で書く方法 (可能か?)
  • lua インタプリタの組み込み (可能か?)

また、あまり現実的ではありませんが、ヒープ、スタック、バイナリサーチツリーなどの一般的なデータ構造をLispでどのように実装するかです。しかし、それは単にLispのリスト操作を使うだけかもしれません。 carcdr を適切な方法で わからなくなる。

私は、(リストの最後の2つを除いて)これらのどれもがLispで不可能であることを強く疑っていますし、そうでなければ人々はLispをそれほど好きではないはずです。また、私が読んだ前述の資料では、Lisp で書かれた現実世界のソフトウェア (Yahoo! ウェブストアが思い浮かびます) がたくさん言及されています。

しかし、プログラミングを( the? )命令型言語でプログラミングをしたことがあるので、新しく得た知識を使って実際のアプリケーションを書けるようになることに不安を感じています。そこで、Lispで実用的なソフトウェアを書けるようになるための最短の方法は何でしょうか?

ところで、私はPeter Seibelの 実践Common Lisp を見ましたが、TOC から判断して、この本は いくつかの にしか触れていません。

もう一つ質問なのですが、(2つの質問を1つにまとめているようで申し訳ないのですが)Lispの関数などのリファレンスはどこにあるのでしょうか?

それと、私は 本当に Lispを好きになりたいです。

どのように解決するのですか?

私は、' 実践的Common Lisp を読んでみてください。すでに質問に答えてくれています。

読むべき本は3~4冊でしょうか。 :

Common Lispリファレンス

マニュアル

さて、次にチェックすべきは、Lisp実装のマニュアルです。ネットワーク、スレッド、...といった具体的な拡張がたくさん書かれています。

Common Lispの実装のドキュメントです。

スライム (EmacsベースのLisp-IDE)には SLIME ユーザマニュアル .

Common Lisp ライブラリのドキュメントです。

ライブラリ

ライブラリの場合は

では、いくつかのポイントを見てみましょう。

  • ファイルの読み方

ファイルとストリームの辞書を参照してください。 ハイパースペック . with-open-stream, read, read-line, read-char, read-byte, read-sequence, ...といった具合です。

  • ファイルを読み、ファイル内の単語を置換し、結果をファイルに書き戻す方法

上で使用します。も参照してください。WRITEと関連。

  • ディレクトリ内のファイルやその他のファイルシステムのものを反復処理する

上記を参照してください。DIRECTORY、パス名、...

  • SQLデータベースとのインタラクション

例えばCLSQLライブラリを使用します。

  • ソケットを使った通信を行う

Lispのマニュアルを参照するか、ポータブルライブラリのいずれかを使用してください。Quicklispを参照してください。

  • ウェブサーバのようなもののためのスレッド

Lispのマニュアルを参照するか、ポータブルライブラリのいずれかを使用してください。Quicklispを参照してください。

  • GUIを作成する

依存します。 参照 Quicklisp または実装固有のライブラリを参照してください。

  • バイナリファイルに対する操作の実行

ファイルやストリームの操作については、Hyperspecを参照してください。write-byte、read-byte。ストリームをバイナリストリームとしてオープンします。

  • パーサを書く(LispでLispのインタプリタではない、私の理解では5行のLispのような)。

既存のツールのいずれかを使用する。既存のパーサーを研究してください。Lispで書かれたパーサーはたくさんありますが、それに関する書籍はあまりありません(AI文献に記載されている自然言語パーサーを除く)。

  • Lisp がネイティブにできないことを行うためにオペレーティング システム (すなわち C や C++ で書かれたもの) とインタラクトする。

依存します。 参照 Quicklisp または実装固有のライブラリを参照してください。

  • C言語でLisp拡張を書く方法(可能か?)

依存します。 参照 Quicklisp または実装固有のライブラリを参照してください。-> FFI

最後のアドバイスです。他の作者のコードを読んでください。

他のLispのコードを勉強してください。世の中には非常に多様なLispのコードが十分に存在します。ウェブサーバから作曲ソフトまで。