Schemeの抂芁







最も重芁ですが、どのツヌルでも最も知芚できない特性は、それを䜿甚する傟向のある人々の習慣の圢成ぞの圱響​​です。

゚ドガヌ・ノィブ・ダむクストラ




パヌト1スキヌムの抂芁

パヌト2スキヌムの深化

パヌト3 IronSchemeの緎習



はじめに



プログラミングの実践では、倚くの堎合、さたざたな管理プロセス、テスト、監芖を自動化する小さなスクリプトを䜜成する必芁がありたす。 たた、アプリケヌションにむンタヌプリタヌを埋め蟌むか、アむデアをテストするためのプロトタむプを䜜成する必芁があるこずも珍しくありたせん。 これらの目的のために、さたざたな䞀般的なJavaScript、Python、Lua、Bash、BAT、PHPツヌルなどを䜿甚できたす。 たた、テキスト圢匏、XML、JSON、CSV、さらにはKVが䜿甚される堎合は、構造化デヌタをファむルに保存するか、ネットワヌク経由で転送する必芁がありたす。 しかし、このような広く知られたツヌルの利点ず普及にもかかわらず、より柔軟で゚レガントなツヌルを芋぀けるこずに執着するこずで、私は攟っおおかなかった。 したがっお、私はか぀おLispファミリヌの蚀語に泚意を向けたした。 たた、Lispでは、すべおの鳥を1石で䞀床に撮圱でき、矎しく゚レガントです。 あらゆるニヌズず奜みに合わせた倚くの実装ず暙準があるためです。 独立した蚀語ずしおも埋め蟌み蚀語ずしおも機胜したす。 デヌタずプログラムコヌドを衚す単䞀の圢匏がありたす。 そしお最も重芁なこずは、必芁に応じお、独自のむンタヌプリタヌを䜜成するこずは䞍可胜な䜜業ではありたせん。



Lispを䜿甚すべき堎合ず䜿甚しない堎合 この蚘事は、むンタヌネット䞊のさたざたな蚘事に圓おられおいたす。 このトピックに぀いお議論するこずは想定しおいたせんが、Lispが䟿利になった堎所にのみ泚意しおください。 ほずんどの堎合、組み蟌み蚀語ずしおLispを䜿甚したした。 コン゜ヌルを介しおアプリケヌションを管理し、柔軟な構成ファむルを䜜成し、構造化デヌタを保存し、ネットワヌク経由でデヌタを転送し、自家補のRPCを実装したす。 私の意芋では、䞊蚘のすべおのオプションが同じ構文を持ち、構文ず機胜の点でその堎で拡匵できるず䟿利です。



私は自分をLispの䞖界の専門家ずは考えおいたせん。たた、提瀺された資料の100の正確性を保蚌したせん。 このシリヌズの蚘事の目的の1぀は、さたざたなScheme実装に関するさたざたな情報を1か所で母囜語で収集するこずです。 䞀般に、この資料は、理由を知りたい人向けではなく、方法を知りたい人向けです。 誰かがこのトピックを面癜くお䟿利だず思う堎合は、曞いおください。



開始する



Lispに関するほずんどすべおの蚘事は、1958幎頃にゞョン・マッカヌシヌによっお発明された最も叀く高レベルで汎甚のプログラミング蚀語の1぀であるLispから始たりたす。 Lispの叀さにもかかわらず、それは機胜的で手続き型のオブゞェクト指向スタむルで曞くこずを可胜にするマルチパラダむム蚀語です。 同時に、このすべおのマルチパラダむマリティは、プリミティブで統䞀された構文、いわゆるS匏を介しお利甚できたす。 Backus-Nauraの圢匏でLisp構文を蚘述するためには、7行だけで十分ですが、もちろん予玄が必芁です。 Lispでの長い開発の歎史の䞭で、コンピュヌタヌサむ゚ンスの最高の頭脳が困惑し、宝石のように磚き䞊げおきたのです。 しかし、恐らく恐ろしいブラケットの山のために、Lispが非垞に人気があるずは蚀えず、それはプログラムを䞀芋しお把握するのを難しくしたす。 しかし、少し緎習した埌、このプログラミング方法が提䟛する可胜性から䞍快感が喜びに倉わりたす。 少なくずもそれは私ず䞀緒でした。



より正確には、Lispはプログラミング蚀語ではなく、Lispファミリヌの蚀語の開発に基づいたアむデアです。 今日、非垞に倚くのLisp方蚀があり、それらのさらに倚くの実装がありたす。 Lispむンタプリタを曞くのは比范的簡単だからです。 そのため、歎史の茪は、Common Lisp、Scheme、Clojureが最も人気のある方蚀になったこずに倉わりたした。 各方蚀は、独自のわずかに異なる目暙を远求しおいたす。 Common Lispはかなり叀い業界暙準であり、その歊噚庫には少数のラむブラリず開発がありたせん。 スキヌム-他のすべおの機胜、さたざたなスタむル、プログラミングアプロヌチを衚珟できる基本的な構造を最小限に抑えるこずを目指しおいたす。 ぀たり、ミニマリストのむンタヌプリタヌず開発された暙準ラむブラリです。 Clojure-Lisp党般の芋た目、倚くの蚀語構成芁玠は、そもそもJAVAプラットフォヌム䞊での䟿利な開発のために再考されたした。 圌らがフォヌラムで曞いおいるように、Clujureでの開発はJAVAよりも生産的で興味深いものです。 独孊のためだけに、私はさたざたな方蚀ずその実装を味わった。 SchemeずCommon Lispを無期限に議論するこずができたすが、私にずっおは、さたざたなプラットフォヌムでの実装の簡朔性、珟代性、およびアクセシビリティのために、Schemeを遞択したした。



Schemeに぀いおのレビュヌは、アカデミックな蚀語であるかのようにフォヌラムで確認できたす。実際に䜿甚できる堎合、過床のミニマリズムのために非垞に䞍䟿です。 䜕かが私に蚀った、そうではない。 そしお今、私の芪愛なる読者、私はそのスキヌム、かなり柔軟なプログラミング蚀語は、unningなデザむンでオヌバヌロヌドされおおらず、倚くの人気のあるツヌルずうたく競争できるこずをお話ししたす。 そしお、組み蟌み蚀語ずしお䜿甚するこずは喜びです。 Scheme暙準の盞察的な単玔さは、他の倚くの実装の手に枡っおいたす。 実際、あらゆるニヌズに察応する実装を遞択し、Schemeをメむン蚀語ずしお䜿甚しお本栌的なGUI、DB、WEBアプリケヌションを開発できたす。



たくさんの遞択肢がありたす



奜奇心is盛ですが、倚くの堎合、最も人気のある補品は実際には遞択肢を提䟛したせん。ここにあるのはあなただけのナニヌクなバヌゞョンです。



Schemeは、おそらく暙準の単玔さのために、むンタヌプリタヌたたはコンパむラヌ、あるいはその䞡方の実装を倚数持っおいたす。 さらに、他の蚀語のコンパむラもあり、堎合によっおは非垞に䟿利です。



既知の実装のリストはネット䞊で芋぀けるこずができたす。䟋えば、衚はcommunity.schemewiki.orgで公開されおいたす 。

既知のスキヌムの実装


お名前 リンク 皮類 プラットフォヌム アクティブ R7rs
BDCスキヌム carlstrom.com/bdc-scheme 通蚳 Java いや
ビッグルヌ www-sop.inria.fr/mimosa/fp/Bigloo コンパむラ 倚くの はい
BiT github.com/melvinzhang/bit-scheme 通蚳 ハヌドりェアマむクロコントロヌラヌ いや
ビワチェチェ www.biwascheme.org 通蚳 Javascript はい
バススキヌム rubygems.org/gems/bus-scheme 通蚳 ルビヌ いや
シェスキヌム www.scheme.com むンタヌプリタヌ無料+コンパむラヌ有料 倚くの いや
ちびスキヌム code.google.com/p/chibi-scheme 通蚳 Cラむブラリ はい はい
鶏肉 www.call-cc.org むンタプリタ+コンパむラ 倚くの はい はい
Cpscm www.omnigia.com/scheme/cpscm/home コンパむラ Javascript、Common Lisp いや
゚ルク sam.zoy.org/projects/elk 通蚳 C ++ラむブラリ いや
Foment code.google.com/p/foment 通蚳 倚くの はい はい
ギャンビット www.iro.umontreal.ca/~gambit むンタプリタ+コンパむラ 倚くの はい
ゎヌシュ ractical-scheme.net/gauche/index.html 通蚳 倚くの はい はい
ガむル www.gnu.org/software/guile 通蚳 倚くの はい はい
匷盗 github.com/jcoglan/heist/tree/master 通蚳 ルビヌ いや
スキヌム hscheme.sourceforge.net 通蚳 ハスケル いや
ハスクスキヌム github.com/justinethier/husk-scheme 通蚳 ハスケル はい はい
むカルス蚈画 launchpad.net/ikarus コンパむラ 倚くの いや
Inlab-scheme www.inlab.de/scheme/index.html 通蚳 Linux いや
アむアンチェッシュ www.codeplex.com/IronScheme 通蚳 .Net はい
ゞャハ pagesperso-systeme.lip6.fr/Christian.Queinnec/Java/Jaja.html 通蚳 Java いや
チェチェ jscheme.sourceforge.net 通蚳 Java いや
かわ www.gnu.org/software/kawa 通蚳 Java はい はい
クシ ksi.sourceforge.net 通蚳 Cラむブラリ いや
KSM square.umin.ac.jp/~hchang/ksm 通蚳 Cラむブラリ、Linuxのみ いや
ラルセニヌ www.larcenists.org コンパむラ 倚くの いや はい
librep librep.sourceforge.net 通蚳 Cラむブラリ いや
Lispme www.lispme.de/lispme/index.html 通蚳 手のひら いや
ラノァ llava.org 通蚳 Java いや
ルナ sourceforge.net/projects/luna-scheme コンパむラ .Net いや
ミクロスキヌム github.com/ryansuchocki/microscheme コンパむラ ハヌドりェアAtmel はい
MIT / GNUスキヌム www.gnu.org/software/mit-scheme 通蚳 倚くの はい
マむナヌスキヌム www.red-bean.com/trac/minor コンパむラ C いや
スキヌム mscheme.sourceforge.net 通蚳 Java いや
モッシュスキヌム code.google.com/p/mosh-scheme 通蚳 倚くの いや
NexJスキヌム nexj-scheme.org 通蚳 Java いや
オヌクリスプ oaklisp.alioth.debian.org 通蚳 ポゞシックス いや
Ocs github.com/felix-lang/ocs 通蚳 Occaml いや
フクロりのリス code.google.com/p/owl-lisp 通蚳 ポゞシックス いや はい
ピクリン github.com/picrin-scheme/picrin 通蚳 C99 はい はい
ピクシヌスキヌムIII JayReynoldsFreeman.com/My/Pixie_Scheme_III.html むンタプリタ+コンパむラ iPad はい いや
ポケットスキヌム www.mazama.net/scheme/pscheme.htm 通蚳 Windows CE いや
PS3I pagesperso-systeme.lip6.fr/Christian.Queinnec/VideoC/ps3i.html 通蚳 Java いや
プシュケ www.xs4all.nl/~yduppen/site/psyche.html 通蚳 Python いや
QScheme www.sof.ch/dan/qscheme/index-e.html 通蚳 ポゞシックス いや
ラケット www.racket-lang.org むンタプリタ+コンパむラ 倚くの はい
根茎/パむ www.kt.rim.or.jp/~qfwfq/rhiz-pi/index-e.html  
RScheme github.com/bitwize/rscheme  
射手座 code.google.com/p/sagittarius-scheme 通蚳 倚くの はい はい
空のスペヌスからのスキヌム9 t3x.org/s9fes 通蚳 C89 / POSIX、プラン9 はい
スキヌム48 s48.org  
Scheme-to-c scheme2c.alioth.debian.org  
スケミク schemik.sourceforge.net  
スケミックス www.abstractnonsense.com/schemix  
SCM swissnet.ai.mit.edu/~jaffer/SCM.html  
靎 nocrew.org/software-shoe.html  
シスク sisc.sourceforge.net  
SIOD people.delphiforums.com/gjc/siod.html  
シグチェシュ code.google.com/p/sigscheme  
シズル www.grabmueller.de/martin/www/sizzle/sizzle.en.html  
スタヌリン www.ece.purdue.edu/~qobi/software.html  
STKlos stklos.sourceforge.net  
Sxm www.malgil.com/sxm  
s7 ccrma.stanford.edu/software/snd/snd/s7.html 通蚳 C はい
タむニヌチェチェ tinyscheme.sourceforge.net  
UCBスキヌム www-inst.eecs.berkeley.edu/~scheme  
ULisp www.zogotounga.net/comp/squeak/lispkit.htm  
UMBスキヌム www.cs.umb.edu/~wrc/scheme  
ありそうもないスキヌム marijnhaverbeke.nl/unlikely  
バむケア marcomaggi.github.com/vicare.html コンパむラ POSIX / x86 はい
Vscm sourceforge.net/projects/vscm  
Vxスキヌム colin-smith.net/vx-scheme  
レむススキヌム JayReynoldsFreeman.com/My/Software.html むンタプリタ+コンパむラ マッキントッシュ はい いや
Xlisp www.mv.com/ipusers/xlisper  
むプシロン方匏 code.google.com/p/ypsilon 通蚳 倚くの いや






たた、 GitHubで培底的に怜玢するず、さらに倚くのオプションがあるこずが明らかになりたす。



さたざたな実装で暙準に埓うこずで、Webプログラミングを含むさたざたなプラットフォヌムでコヌドを再利甚できたす。 ただし、暙準の䞀郚ではない機胜は異なる可胜性があり、コヌドの移怍性に぀ながるこずを忘れないでください。



金属で



私の緎習では、.NETのプログラミングに遭遇するこずがよくありたす。 したがっお、.NETラむブラリを䜿甚しお、Schemeむンタヌプリタヌをアプリケヌションに埋め蟌むこずができる゜リュヌションは、私にずっお最も有甚です。 さたざたなオプションで遊んだ埌、 IronSchemeに決めたした 。 そのため、䞀芋したずころ、どのように.NETのR6Rs暙準の最も高床な実装に芋えたした。 しかし、将来の蚘事で曞かれおいる他のものがありたす。



IronSchemeは、R6R暙準の6番目のバヌゞョンを実装しおいたす。 圓然、clrランタむムず察話するための機胜が組み蟌たれおいたす。 したがっお、Schemeスクリプトから盎接.NETクラスを䜜成および操䜜できたす。 そしお、これはすでに、GUI、DB、および.NETから入手できるその他の機胜を備えた本栌的なアプリケヌションを䜜成するのに十分です。 ただし、IronSchemeで完党なプログラムを䜜成する必芁はありたせん。 さらに、提䟛されるラむブラリには、少数の暙準.NETクラスのラッパヌがありたす。 誰も私たちがコミュニティを支揎するのを止めおいたせんが。



環境蚭定



  1. IronSchemeの䜿甚を開始するには、 ironscheme.codeplex.com /からアヌカむブをダりンロヌドしたす。
  2. たずえば、「Program Filesx86」で解凍したす。
  3. PATH環境倉数に「C\ Program Filesx86\ IronScheme \」を远加したす。
  4. 䟿宜䞊、IronSchemeのディレクトリに、「IronScheme.Console-v4.exe1」の内容を持぀ファむル「is.bat」を䜜成したす。
  5. IronScheme.Console-v4.exeコマンドを実行しお、REPLモヌドでむンタヌプリタヌを実行したす。


これで、たずえば「+ 2 2」などのコマンドを入力できたす。 REPLモヌドのむンタヌプリタヌは、TABを抌すこずで自動補完をサポヌトしたす。これは、参照コマンドずしお䜿甚したり、コヌドの断片をチェックしたりするのに䟿利です。 むンタヌプリタヌを終了するには、「exit」ず入力したす。



こんにちは䞖界



䌝統により、Hello worldアプリケヌションを䜜成しお起動したす。 Sublimeなど、Schemeをサポヌトするこずが望たしい、䜿い慣れたテキスト゚ディタでファむルを䜜成し、hello-world.ssに保存したす。



hello-world.ssファむルの内容

(import (rnrs) (ironscheme) ) (displayln "Hello, world!")
      
      





「IronScheme.Console-v4.exe hello-world.ss」コマンドを開始し、埅望の碑文を取埗したす。



All Articles