2009-06-25 4 views
5

よく書かれたコードを読むことは、私が言語を学ぶのを助けるようです。 (少なくともC言語で動作しました)[質問の「あまり指定されていない部分を削除する」]ミニ言語、すなわちDSLの(c)lispの例をお探しください

私は特に、ミニ言語やDSLを作成するのに適した言語としてlispの評判に興味があります。問題。もちろん、プログラムはオープンソースでなければならず、ウェブ上で利用可能であることが好ましい。

私はGoogleで検索して、この例を見つけた:

http://lispm.dyndns.org/news?ID=NEWS-2005-07-08-1

誰もが別のものを持っていますか? (そして、はい、私は "Practical Common Lisp"を読んでいきます。)

11時間後(わずか11時間!):ありがとう、みんな。どのようなすばらしいサイトですか、そして良い回答とヒントがたくさんあります!

+0

混乱を避けるために:Lispはプログラミング言語の一種です。 Common Lisp(またはCL:short)はLispの方言です。 CLISPはCommon Lisp(CCL、GCL、SBCL、LispWorks、ACLなど)の特定の実装です。 –

答えて

5

まだ見ていない場合は、Practical Common Lispの書籍は無料でオンラインで利用でき、いくつかのサンプルプロジェクトがあります。

+0

第2に、これは素晴らしいLispの本です。 – HappyCodeMonkey

+0

はい、今週はダウンロードしましたが、まだダイブしていません。誰かが、「ワーキングコード」の種類と「教訓的なコード」の違いなど、別の角度から物事に来たプログラムや2つを知っているかもしれません。 – behindthefall

+2

PCL *のコードは実用的な値を持っています。 – skypher

6

私はあなたの制約が過剰に指定されている感じ:

不透明(「よく書かされることなく(C)Lispの トリックや機能のほとんどを誇示するために十分

多様、理解するのに十分小さい ' の一部)、他の パッケージとは独立しています。

Common Lispは巨大な言語であり、言語要素を組み合わせるときに出現するパワーセットははるかに大きくなります。あなたは、CLで「ほとんどのトリック」を示す小さなプログラムを持つことはできません。

CLが別の言語から来ていることを知ると、あなたは外国人に見える多くの概念もあります。そのようなCLはトリックではありませんが、その基本的なパラダイムではありません。

私の提案は少し先に読んでから、独自のプログラムを構築したり、オープンソースコードを調べたりすることです。

たとえば、Edi Weitzは通常、良いコードを書いています。彼のプロジェクトはhttp://www.weitz.de/でチェックしてください。

今すぐPCLをお読みください。 :)

+0

"またはオープンソースコードを探している" Ah。さて、あなたはそれを持っています。教科書やWeitzサイト(何点ありがとう、BTW)以外の推奨事項はありますか?ミニ言語タイプのアプリケーションの例を探していたが、パッケージとは独立していることを覚えておいてください。 – behindthefall

+0

検索エンジンの単純なブーリアン言語は次のとおりです。http://xach.livejournal.com/131456.html(ただし、マクロは使用しません)。 cl-cairo2には、小さなDSL(defmacro用のgrep)を形成するいくつかのマクロの例があります。 fare-matcherには、特定のmatcher(define - * - matcher)を定義するDSLがあります。 イテレートライブラリ(およびLOOP実装)は両方とも、柔軟なループを作成する洗練されたDSLの例です。 usocketには、ソケットセットアップ/ティアダウンの詳細を抽象化する別の小さなDSLがあります(WITH-CLIENT-SOCKETなど)。 まともなclbuildチェックアウトでは、より多くの情報が表示されます。 – skypher

+0

ありがとうございます。コードを "反復ライブラリ"に見つける方法がわかりますか?これは "言語を使って言語を拡張する"という素晴らしい例のように聞こえ、最近私はPythonの唯一の基本的なwhile構文に満足しなければならないかどうか疑問に思っていました。 – behindthefall

4

LOOPマクロは、Common Lispに埋め込まれたDSLのほぼ完全な例です。しかし、それはすでに標準の一部であるため、あなたが後にしているものではないかもしれません。

4

CLのフォーマット機能にミニdslがあります。

http://cybertiggyr.com/fmt/

私は、印刷文字列のDSLは、マシンコードにコンパイルされますと思います。

( "〜{〜A〜#[〜:;、〜]〜}" ゼロ形式LST))

5

私は一種の怠惰なリンクを見つけることだけど、あなたがする必要があります'Google'/'Bing'できます。以下のリストには、言語と非常に異なる組み込み言語を組み込むさまざまな方法が含まれています。

  • 反復
  • 「defsystem年代のシステム/モジュール/ファイルの記述のITERATE、例は、ASDF
  • インフィックスは
  • 定義アプリケーションフレーム埋め込みユーザインタフェース
  • を特定するためのCLIM内をreadmacroされますLispWorksとCLSQLでLispされたSQLクエリ
  • LispWorksのKnowledgeworks:ルール、クエリなどを使用した論理言語
  • 埋め込み型PアレグロCLでrolog様々な形で
  • 埋め込まれたHTML
  • XMLispは、非決定論的なプログラミング
  • PWGL、あること、音楽

注意を構成するためのビジュアルプログラミングのためのXMLとLisp

  • スクリーマーを統合しますシンプルな組み込み言語、そしてProlog、Screamer、CORBAのようなまったく新しいパラダイムを提供している実際の複雑な言語をサポートしています...

  • 2

    CLSQLはSQLクエリにLispy記法を提供します。 ompilesをSQLに変換し、すべてのLisp HTMLおよびXML生成ライブラリが対象となります。 Metabang bindは、字句結合変数のDSLです。あなたはおそらくあなたがそれを必要としているかどうかはわかりませんでしたが、それは驚くほど役に立つと分かります。

    0

    SERIESは、あなたの定義に応じてDSLの一種です。実際には言語の一部ではありませんが、CLTL2の付録にあります。

    関連する問題