Racketモジュールの簡単な記録を書く

3635 ワード

週末の2日間はラッカートでCirru Sepalを運行するprotoと書いてありましたtypehttps://github.com/Cirru/cirrusepal-rkthttps://github.com/Cirru/cirruparser-rkt私には何か楽しく書いた原型があって、それから放っておいたのが欠点です.もう十分でしょう.Sepalプロジェクトの目標はCirru文法で他の言語のIRまたはAST実行を書くことです.CirruはもともとLisp元のプログラミングに啓発されたので、Lispの中で最も面白いことを実現することができて、Lispの中で敷居のドキュメントが最も良くて、敷居も高くないので、Racket.
私はCirruの文法を设计する前にSchemeを学んだことがありますが、似たようなプログラムを书いていません今の话はだんだんimmutableのデータを理解したので、そんなによく知らない感じがします.それに、私はRacketでCoffeeScriptの机能を真似て、复雑な机能は前の文章と同じで、私はモジュール化とパッケージの方面の考え方を整理して、これはとても覚えにくいです...ただの零歳記録で、いざ使ったらすぐに見つけて思い出すことができます
モジュール管理
Racket 0.6は大きなアップグレードを経て、以前使っていたPLaneTはもうお勧めしませんでしたが、互換性があるのではないかと疑っています.ファイル接尾辞が.ssから.rktに変わったのもこの時に変更された新しいスキーマモジュールです.Webまたはローカルserveでいいということです.具体的には、ドキュメントを検討して注目してください.コードはGitHubに管理され、コマンドでローカルにインストールできます.http://docs.racket-lang.org/pkg/getting-started.html#%28part._github-d...
raco pkg install git://github.com/Cirru/parser-rkt

モジュールcollection概念
この概念はnpmの中のモジュール名に似ているが、細部は奇妙で、どうせモジュール名には対応していない.モジュールの名前は直接ファイル名のようだ.GitHubからインストールすれば、倉庫名である.一般的にRacketの中のrequire "dir/sub"は相対経路を参照しているが、引用符に注意してrequire collection/fileは引用符がない.collectionの中のファイルRacketを引用して複数のモジュールを実行して1つのcollectionを共用しますが、ファイルが衝突するわけではありません.collectionとファイル名が分かれているので、両者はまったく合わないようです.
ダウンロードされたすべてのファイルは、次のようなシステムのディレクトリに統一的に保存されます.
➤➤ ls /usr/local/Cellar/plt-racket/6.1.1/share/racket/collects

要するに、参照モジュール、参照ファイル、2つのニーズを書くことができますが、モジュールのcollectionはルートディレクトリinfo.rktで定義されています.文法もあまり確定していません.具体的な詳細はドキュメントを見てください.http://docs.racket-lang.org/pkg/metadata.html
racket#lang info
(define collection "cirrusepal")

モジュール開発
モジュールを開発する時、モジュール名によってファイルを引用する必要があるかもしれないので、一般的にlinkをします.linkは実際にはインストールディレクトリにコマンドを走って、開発中のモジュールをグローバルにインストールします.
textraco pkg install

実際には、あるファイルパスにリンクされた情報が記録されています.
text➤➤ raco pkg show
Installation-wide:
 Package       Checksum                                    Source
 racket-lib    436f0928598fc1a8abf27422e8e6588bef45f652    (catalog racket-lib)
User-specific for installation "6.1.1":
 Package       Checksum    Source
 parser-rkt    #f          (link ../../../../repo/cirru/parser-rkt)
 sepal-rkt     #f          (link ../../../../repo/cirru/sepal-rkt)
➤➤ cat ~/Library/Racket/6.1.1/share/info-cache.rktd
((#"../../../../repo/cirru/sepal-rkt" (collection version) (lib "cirrusepal") 1 0) (#"../../../../repo/cirru/parser-rkt" (collection version) (lib "cirruparser") 1 0))

モジュールrequire provide構文
ファイル間、モジュール間、どのように相互参照するか、上には大体説明したように、ファイルがコードをエクスポートする方法があります.キーワードでタグ付けすればいいので、ドキュメントを見てください.http://docs.racket-lang.org/guide/module-basics.html注意キーワードは奇妙なprovideで、フロントエンドの新しいキーワードではありません.
最后の#lang racketは特殊な文法で、moduleの简书です.具体的にはドキュメントを见て、他の人の使い方に従って直接书いてもいいようです.http://docs.racket-lang.org/guide/Module_Syntax.html#%28part._hash-lan...
Racketは面白い言語ですが、深く掘ることはないと思います.ドキュメントを調べる必要があります.http://learnxinyminutes.com/docs/racket/http://docs.racket-lang.org/reference/index.html evalについて
また、Sepalコアの原理については、evalの使用時に注意しなければならないことがあります.http://stackoverflow.com/a/22742799/883571
racket(define ns (make-base-namespace))
(define expr '(+ x 1))
(for/list ((x '(2 5 3 1 99 12)))
  (eval `(let ((x ,x)) ,expr) ns))
=> '(3 6 4 2 100 13)

私もただこまごましたことを覚えているだけで、今はRacketを深く学ぶ時間がありません.