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コンパむラ倚くのはい
BiTgithub.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むンタプリタ+コンパむラ倚くのはいはい
Cpscmwww.omnigia.com/scheme/cpscm/homeコンパむラJavascript、Common Lispいや
゚ルクsam.zoy.org/projects/elk通蚳C ++ラむブラリいや
Fomentcode.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-schemewww.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ラむブラリいや
KSMsquare.umin.ac.jp/~hchang/ksm通蚳Cラむブラリ、Linuxのみいや
ラルセニヌwww.larcenists.orgコンパむラ倚くのいやはい
libreplibrep.sourceforge.net通蚳Cラむブラリいや
Lispmewww.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通蚳ポゞシックスいや
Ocsgithub.com/felix-lang/ocs通蚳Occamlいや
フクロりのリスcode.google.com/p/owl-lisp通蚳ポゞシックスいやはい
ピクリンgithub.com/picrin-scheme/picrin通蚳C99はいはい
ピクシヌスキヌムIIIJayReynoldsFreeman.com/My/Pixie_Scheme_III.htmlむンタプリタ+コンパむラiPadはいいや
ポケットスキヌムwww.mazama.net/scheme/pscheme.htm通蚳Windows CEいや
PS3Ipagesperso-systeme.lip6.fr/Christian.Queinnec/VideoC/ps3i.html通蚳Javaいや
プシュケwww.xs4all.nl/~yduppen/site/psyche.html通蚳Pythonいや
QSchemewww.sof.ch/dan/qscheme/index-e.html通蚳ポゞシックスいや
ラケットwww.racket-lang.orgむンタプリタ+コンパむラ倚くのはい
根茎/パむwww.kt.rim.or.jp/~qfwfq/rhiz-pi/index-e.html
RSchemegithub.com/bitwize/rscheme
射手座code.google.com/p/sagittarius-scheme通蚳倚くのはいはい
空のスペヌスからのスキヌム9t3x.org/s9fes通蚳C89 / POSIX、プラン9はい
スキヌム48s48.org
Scheme-to-cscheme2c.alioth.debian.org
スケミクschemik.sourceforge.net
スケミックスwww.abstractnonsense.com/schemix
SCMswissnet.ai.mit.edu/~jaffer/SCM.html
靎nocrew.org/software-shoe.html
シスクsisc.sourceforge.net
SIODpeople.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
STKlosstklos.sourceforge.net
Sxmwww.malgil.com/sxm
s7ccrma.stanford.edu/software/snd/snd/s7.html通蚳Cはい
タむニヌチェチェtinyscheme.sourceforge.net
UCBスキヌムwww-inst.eecs.berkeley.edu/~scheme
ULispwww.zogotounga.net/comp/squeak/lispkit.htm
UMBスキヌムwww.cs.umb.edu/~wrc/scheme
ありそうもないスキヌムmarijnhaverbeke.nl/unlikely
バむケアmarcomaggi.github.com/vicare.htmlコンパむラPOSIX / x86はい
Vscmsourceforge.net/projects/vscm
Vxスキヌムcolin-smith.net/vx-scheme
レむススキヌムJayReynoldsFreeman.com/My/Software.htmlむンタプリタ+コンパむラマッキントッシュはいいや
Xlispwww.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」コマンドを開始し、埅望の碑文を取埗したす。

Source: https://habr.com/ru/post/J267015/


All Articles