See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Scheme - Wikipedia

Scheme

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Scheme
パラダイム マルチパラダイム
設計者 ガイ・L・スティール、ジェラルド・ジェイ・サスマン
型付け 強い、動的型付け
主な処理系 Gauche, PLT Scheme, MIT/GNU Scheme, Scheme 48, Chicken, Gambit, Guile, Bigloo, Chez Scheme, STk, STklos, Larceny, SCM, Kawa, Ikarus
影響を受けた言語 Lisp, ALGOL
影響を与えた言語 Common Lisp, JavaScript, Ruby, Dylan, Lua
  

Schemeスキーム)は、ガイ・スティール(Guy Lewis Steele Jr.)とジェラルド・ジェイ・サスマン(Gerald Jay Sussman)によって開発された。LISPの方言の1つで、関数型プログラミング言語としての側面がよく知られたマルチパラダイムプログラミング言語である。他のLISP言語と比べてもシンプルで一貫した思想に基づく点が特徴である。

Schemeは、実行時のスナップショットを抽象化した継続(コンティニュエーション)、静的スコープ末尾最適化を言語として保証するなどの機能を持つ。

Schemeが出てくるまでの他のLISP方言では変数束縛が実行履歴を元に決定される動的スコープを採用することが多かったが、Schemeでは変数の意味がコード上のネスティングで定まるという静的スコープを持つ。静的スコープはCommon Lispに採用された。Schemeは、アメリカ合衆国では大学でのプログラミング教育に広く使われている。

MITでプログラミング教育に使われている処理系実装MIT Schemeは、多くのプラットフォームで動作する。

サスマンらによる『計算機プログラムの構造と解釈 第二版』(ISBN 489471163X)は、演習や説明にSchemeを使ったコンピュータサイエンスの優れた教科書である。

言語仕様は、文書The Revised5 Report on the Algorithmic Language Scheme(R5RSと呼ばれる)で定められる。LISP系言語はSchemeとCommon Lispを二大潮流とするが、提案された機能を原則全て導入するCommon Lispに対して、メンバーの全員一致を原則とするSchemeという特徴を持っている。

なお、2007年9月に新仕様R6RSが成立した。4部構成となり、R5RSに比べおよそ3倍の文章量となった。今までは小さな言語仕様に対してのこだわりが見られたが、Unicodeサポート等の実用的な言語として必要な要素が盛り込まれている点が特徴的である。しかし、多くの機能が盛り込まれたにもかかわらず細部の練りこみが不十分であるといった批判もあり、非公式にR5RSを拡張する形でERR5RS(Extended R5RS Scheme)という規格を検討するコミュニティも現れている。

[編集] SRFI

Schemeは言語機能を必要十分の最低限まで単純化することを目指した言語である。そのため仕様書がコンパクトな反面、実用に際して各種のライブラリが乱立し、移植性が問題になっていた。そこで実装間の統一をとるため、コミュニティ内の議論を集約しているのがScheme Requests for Implementationである。SRFIではライブラリ仕様、言語拡張仕様などがインデックス化されており、SRFI準拠の実装系は「xに準拠」といった形で利用者の便宜を図ることができる。

なお、Schemeでは言語機能とライブラリ機能は分けて考えられているため、SRFIとScheme言語仕様のコミュニティは原則分離している。

[編集] 実装

Schemeの仕様書は50ページにも満たないため、かなりの数の実装が存在する。

  • Bigloo - 高速な実行ファイルを作るコンパイラ。
  • Chez Scheme - 商用の高速な Scheme 実装。
  • Chicken Scheme
  • Gauche(外部リンク) - スクリプトインタプリタ向け。最初から多言語への対応を考慮している処理系。
  • Guile - GNU のオフィシャルな拡張用言語。Schemeをベースにしている。
  • Kawa - GNU プロジェクトのひとつ。Scheme プログラムを Java 用にコンパイル可能。
  • LispMe - Palm OS 上 Scheme 環境。フリーソフト。
  • MIT Scheme - x86 アーキテクチャ用のフリーな Scheme 実装。
  • PLT Scheme - 高機能な IDE を備えた Scheme 環境。多くの教育現場で利用されている。
  • PocketScheme(外部リンク) - WindowsCE用のScheme実装。
  • TinyScheme - 非常に小さい実装。Zaurusなどでも走る。正規表現やソケット通信もサポート。
  • Vx-scheme - VxWorks用のScheme実装。
  • WebScheme - JavaScriptによるScheme実装。ブラウザ上で動作出来るように作られてある。
  • Mosh - R6RS準拠を目指した高速なインタプリタ
  • Ypsilon - R6RSに準拠するリアルタイムアプリケーション向けの実装。
  • Larceny
  • IronScheme
  • Ocs
  • QScheme
  • HScheme
  • Scheme48
  • Jscheme
  • rhizome/pi

[編集] 外部リンク

ウィキブックス
ウィキブックスScheme関連の教科書や解説書があります。


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -