scheme
「scheme」の意味
「scheme」とは、計画や仕組み、または策略といった意味を持つ英単語である。計画や仕組みの場合、目標達成のために立てられた方法や手順を指す。策略の場合、特定の目的を達成するために秘密裏に立てられた計画や手段を意味する。「scheme」の発音・読み方
「scheme」の発音は、IPA表記では /ski:m/ であり、IPAのカタカナ読みでは「スキーム」となる。日本人が発音するカタカナ英語では「スキーム」と読む。「scheme」の定義を英語で解説
A scheme is a plan or arrangement involving many people which is made by a government or other organization, or a secret plan made by a group of people to do something illegal or harmful. It can also refer to a systematic plan or arrangement for attaining a particular goal or solving a particular problem.「scheme」の類語
「scheme」の類語には、plan(計画)、strategy(戦略)、plot(策略)、system(システム)、program(プログラム)などがある。「scheme」に関連する用語・表現
「scheme」に関連する用語や表現には、schemer(策略家)、schematic(図式的な)、schematize(図式化する)、color scheme(配色)などがある。「scheme」の例文
1. They devised a scheme to reduce energy consumption.(彼らはエネルギー消費を削減する計画を立てた。)2. The government has launched a new housing scheme for low-income families.(政府は低所得家庭向けの新しい住宅プログラムを立ち上げた。)
3. The company's pension scheme is very generous.(その会社の年金制度は非常に寛大である。)
4. She was involved in a scheme to defraud the bank.(彼女は銀行をだまし取る策略に関与していた。)
5. The project is part of a larger scheme to revitalize the city center.(そのプロジェクトは、市中心部を活性化させるための大規模な計画の一部である。)
6. The manager's scheme to increase sales was successful.(マネージャーの売上増加のための計画は成功した。)
7. They hatched a scheme to take over the company.(彼らは会社を乗っ取るための策略を企てた。)
8. The color scheme of the room is very soothing.(その部屋の配色は非常に落ち着く。)
9. The new traffic scheme aims to reduce congestion in the city.(新しい交通計画は、都市の渋滞を緩和することを目指している。)
10. The marketing scheme was designed to attract more customers.(そのマーケティング計画は、より多くの顧客を引き付けるように設計されていた。)
スキーム
「スキーム」とは・「スキーム」の意味
「スキーム」は、「計画」「体系」を意味する言葉であり、ビジネス用語やit用語として使用される。「計画」を意味する英単語「scheme」が元である。スキームと同じ「計画」という意味を持つ言葉としては、「プラン」が挙げられるが、プランはただ漠然とした計画を指すことが多い。それに対してスキームは、具体的な内容が、すでに作られている計画を指すという違いがある。つまり、プランが発展したものが、スキームだ。ビジネスシーンでは、スキームは、ビジネスに関するあらゆる計画や、計画における枠組みを指す用語として使用される。そして、特定の計画や枠組みに限定するために、「事業スキーム」や「取引スキーム」という風な表現にすることもある。また、ビジネスシーン以外でも、行政などで、計画や枠組みを意味する用語としてスキームが使用される場面がある。
it業界では、スキームは、「URLスキーム」あるいは「URIスキーム」という用語で使用されることが多い。インターネット上における所在を示す、URLあるいはURIに含まれる通信規格の情報を指す。インターネット回線を使って任意の所在に辿り着くためには、「URLスキーム」や「URIスキーム」で指定した通信規格を使用する。代表的なものは「http」であり、「スキーム名」と呼ばれることもある。また、主にスマートフォンで、特定のアプリを開くための仕組みを「URLスキーム」と呼ぶことも多い。
特殊な例として、「ザ・スキーム」というゲームの固有名詞として使用されているパターンもある。その場合は、密かに計画された悪事を指す、「陰謀」という意味になる。
「スキーム」の熟語・言い回し
スキーム図とは
「スキーム図」は、計画の内容を図解したものである。スキームは、具体的な枠組みが決まっている計画を指す。その内容を文章のみで表す場合、複雑でわかりにくくなる恐れがある。そこで、内容をわかりやすくするために、図形やイラストを取り入れたスキーム図を作成することが多い。スキーム図には、大きなカテゴリが小さなカテゴリに枝分かれする形の樹形型や、時系列に沿って記載する形のフロー型など、複数の種類がある。
業務スキームとは
「業務スキーム」は、主にビジネスシーンにおいて、「業務体系」を意味する言葉として使用される。組織における従業員の働き方の指標や、特定の部署の構造などを指す言葉である。
事業スキームとは
「事業スキーム」は、「事業計画」を指す言葉である。特定の事業において、期日や投入する資金額など、具体的な内容が決められている計画を指す。事業で金融機関から融資を受ける際には、事業スキームを元にした事業計画書が必要になることがほとんどである。
反応スキームとは
「反応スキーム」は、化学分野で使用される専門用語である。分子構造を六角形で記したベンゼン環を用いて、どのような化学反応が起こったのかを記した図を指す。
数値スキームとは
「数値スキーム」は、数学や物理学で用いられる用語である。何らかの数値を代入した際、特定の数値が算出される構造、高度な方程式などを指す言葉だ。
ビジネススキームとは
「ビジネススキーム」は、ビジネスシーンにおいて、具体的な計画を指す言葉である。ビジネスに関するスキームであれば、ひと通りビジネススキームと呼べる。そして、スキーム図と文章を織り交ぜた書き方をすることが多い。ビジネススキームという言葉を実際に使用する場合、例文は、「新しく事業を始めるために、ビジネススキームが必要である」「融資を受けるためには、ビジネススキームの修正をしなければならない」のように使用する。
「スキーム」の使い方・例文
「スキーム」をビジネスシーンで使用する場合、「企画が通ったため、より具体的なスキームを作ることとなった」「期限が迫っているというのに、スキームの内容がまだ練り上がっていない」「今思えば、この事業はスキームの段階から非の打ちどころがなかった」「組織の上層部から、短期間でのスキームの修正を命じられた」のような使い方となる。また、「この失敗は、行政のスキームに無理があったことが原因だろう」「民間と自治体が連携するスキームが立ち上げられた」といった使い方も可能だ。it用語として使用するのであれば、「URLスキームが乗っ取られる被害が多発している」「URIのセキュリティ対策を万全にしなければならない」「これは私が今まで使ったことのないスキーム名だ」のような表現となる。
スキーム scheme
Scheme
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/03/15 02:37 UTC 版)
![]() Schemeのロゴ | |
パラダイム |
関数型プログラミング、手続き型プログラミング、メタプログラミング、命令型プログラミング ![]() |
---|---|
登場時期 | 1975年 |
設計者 | ガイ・L・スティール・ジュニア、ジェラルド・ジェイ・サスマン |
最新リリース | R7RS-small / 2013[1] |
型付け | 強い、動的型付け |
主な処理系 | Gauche、Racket、MIT/GNU Scheme、Scheme 48、Guile、Chez Scheme |
影響を受けた言語 |
LISP、ALGOL、MDL (プログラミング言語) ![]() |
影響を与えた言語 | Clojure、Common Lisp、Dylan、Egison、EuLisp、Haskell、Hop、JavaScript、Julia、Lua、MultiLisp、Python、R、Racket、Ruby、Rust[2]、S、Scala、T |
ウェブサイト |
www |
拡張子 |
scm、ss ![]() |
Scheme(スキーム)はコンピュータ・プログラミング言語 LISPの方言のひとつで、静的スコープなどが特徴である。仕様(2017年現在、改7版まで存在する)を指すこともあれば、実装を指すこともある。Schemeにより、LISP方言に静的スコープが広められた。
概要
Schemeは、MIT AIラボにて、ジェラルド・ジェイ・サスマンとガイ・スティール・ジュニアによって1975年頃に基本的な設計がなされた。動機は、カール・ヒューイットの提案によるエレガントな並行計算モデル「アクター」と、同じくその言語のPLASMA(Planner-73)を理解するためであった。
静的スコープ(ALGOL由来とされる[注釈 1])は、状態を持つデータであるアクタ(クロージャ[注釈 2])の実現以外にも、lambda
構文を用いたλ計算[注釈 3]や末尾再帰[注釈 4]の最適化に不可欠な機構であった。
また、プログラムの制御理論から当時出てきた継続[注釈 5]及びアクタ理論におけるアクタへのメッセージ渡し[注釈 6]の概念から触発された継続渡し形式[注釈 7][注釈 8]と呼ばれるプログラミング手法は以後の継続の研究に大きな影響を与えた。
歴史
MIT人工知能研究所においては以下のとおりLISPに始まるいくつかの言語が作られた。
年 | 言語 | 作者 |
---|---|---|
1960年 | LISP | マッカーシー、他 |
1964年 | Meteor | ボブロウ |
1969年 | Convert | ガズマン |
1969年 | Planner | ヒューイット |
1970年 | Muddle | サスマン、ヒューイット、他 |
1971年 | Micro-Planner | サスマン、他 |
1972年 | Conniver | サスマン、他 |
1973年 | Plasma | ヒューイット、他 |
1975年 | Schemer | サスマン、スティール |
この中でカール・ヒューイットが設計した規則ベースの言語 Planner はあまりに複雑な機構を持っていたため当初設計された全機能の実装は困難であり[注釈 9]、サスマン等はそれをサブセット言語の Micro-Planner として実現し、さらには、 Planner の流れを汲んだ独自言語として Conniver を作成した。
同じくカール・ヒューイットが設計したアクタ言語 Plasma (Planner-73) も複雑な機構を持っていたため、MacLisp による実装が存在したものの、その動作の仕組みを理解するのは困難であった。サスマン及びガイ・スティール・ジュニアは Plasma を理解するために、不要な機能を省いた LISP 構文を持つ小さな Plasma を設計した。
上記の Plasma からその小さな Plasma の設計に至る過程は Planner から Micro-Planner 及び Conniver へ至る過程を彷彿とさせるものであったため、その言語は Planner(計画する者)及び Conniver(策略を巡らす者)の次という意味で当初 Schemer(陰謀を企てる者)と名付けられた。しかし、当時のオペレーティングシステムのファイルシステムの制限からファイル名が6文字に切られたことから Scheme という名前が使われるようになった。
機能
静的スコープ
マッカーシーが1979年に回顧で、1960年の最初のLISP(LISP I)に関して「In modern terminology, lexical scoping was wanted, and dynamic scoping was obtained.」と書いているように[3]、計算理論的にも静的スコープが本来は「正当」であり、動的スコープは、言ってしまえばある種の安易なインタプリタの実装手法が招く「バグ」である(有用なことも多いが)。
ガイ・スティールは、1962年の LISP 1.5 からの変更点として最初に静的スコープの採用と実装を挙げており、サスマンが静的スコープを実装したALGOL 60に関して持っていた興味からによるもので、ALGOLの直接の影響だと述べている。[4]
ただし、1962年の LISP 1.5 も1960年代後半の Maclisp もスコープの変数束縛に関しては色々と不完全だった。[5]
FUNARG問題としてLISPの初期から既に認識され議論されていたことでもあり、必ずしも1975年のSchemeから始まったとは言えないが、Scheme以後のLISP方言に静的スコープが広まったのはSchemeからの影響と言ってよく、殊にCommon Lispは特筆される。
継続
call-with-current-continuation
Scheme はcall-with-current-continuation
(略称:call/cc
)と呼ばれる[注釈 10]ピーター・ランディンやジョン・レイノルズに始まる脱出オペレータ[注釈 11]の命令を提供する。
言語仕様
Scheme の言語仕様はIEEEによって公式に定められ[6]、その仕様は「Revisedn Report on the Algorithmic Language Scheme (RnRS)」と呼ばれている。2016年現在広く実装されているものは改訂第五版に当たるR5RS(1998年)である。
なお、2007年9月に「The Revised6 Report on the Algorithmic Language Scheme (R6RS)」[7]が成立した。4部構成となり、R5RSに比べおよそ3倍の文章量となった。R5RSまでは小さな言語仕様に対してのこだわりが見られたが、Unicode サポート等の実用的な言語として必要な要素が盛り込まれている点が特徴的である。しかし、多くの機能が盛り込まれたにもかかわらず細部の練りこみが不十分であるといった批判もあり、非公式にR5RSを拡張する形でERR5RS (Extended R5RS Scheme) という規格を検討する党派も現れている。
2009年8月、Scheme 言語運営委員会は、Scheme を大規模バージョンと、大規模バージョンのサブセットとなる小さな言語仕様のふたつの言語に分割することを推奨する意向を発表した[8]。
2013年7月、「The Revised7 Report on the Algorithmic Language Scheme (R7RS)」[9] (small language) が成立した。
仕様の決定
![]() | この節の加筆が望まれています。 |
実装
Scheme の仕様書はR5RSだと50ページにも満たないため、かなりの数の実装が存在する。
- Bigloo - 高速な実行ファイルを作るコンパイラ。
- BiwaScheme - JavaScript による実装。ブラウザ上で動作する。
- Chez Scheme - もと商用だったが、現在はオープンソースの高速な実装。
- Chicken - 可搬性の高い実用的コンパイラ。
- Gauche - インタプリタ。多言語への対応、STklos を発展させた(メタ)オブジェクトシステムを持つ。
- Gambit(英語版) - Schemeインタプリタ及びScheme→Cコンパイラ。
- GNU Guile - GNU の公式な拡張用言語。Scheme を元にしている。
- HScheme
- IronScheme
- Jscheme
- JAKLD - Java アプリケーション組み込み用のLISPドライバ
- Kawa - GNUプロジェクトのひとつ。Scheme プログラムを Java 仮想機械用にコンパイル可能。
- Larceny - IA-32、SPARC の機械語を出力。IEEE/ANSI、R5RS、ERR5RS, R6RS準拠。
- LispMe - Palm OS 用の実装。無料。
- MIT Scheme - x86アーキテクチャ用の Scheme 実装。無料。
- Mosh - R6RS準拠の高速なインタプリタFFI、ソケットなどの拡張も。
- Ocs
- PocketScheme - Windows CE 用の実装。
- Racket - 旧称 PLT Scheme。教育用の豪華な開発環境、柔軟なシステムで広く使われる。
- QScheme
- rhizome/pi
- Scheme48
- SECDR-Scheme - Lispkit Lisp 拡張による(並列)Scheme。
- SigScheme - アプリケーション組み込みを目的としたR5RS準拠の実装。uimで使用されている。
- SISC - Second Interpreter of Scheme Code。Java 仮想機械上で動作するR5RS準拠の実装。Java オブジェクトを Scheme 上から利用することが可能。
- TinyScheme - 非常に小さい実装。Zaurusなどでも走る。正規表現やソケット通信もサポート。
- Vx-scheme - VxWorks 用の実装。
- Ypsilon - R6RSに準拠するリアルタイムアプリケーション向けの実装。
SRFI(サーフィ)
Scheme は言語機能を必要十分の最低限まで単純化することを目指した言語である。そのため仕様書が簡素な反面、実用に際して各種のライブラリが乱立し、移植性が問題になっていた。そこで実装間の統一をとるため、コミュニティ内の議論を集約しているのが「Scheme Requests for Implementation (SRFI)」である。SRFI ではライブラリ仕様、言語拡張仕様などがインデックス化されており、SRFI 準拠の実装系は「◯◯に準拠」といった形で利用者の便宜を図ることができる。
なお、Scheme では言語機能とライブラリ機能は分けて考えられているため、SRFI と Scheme 言語仕様のコミュニティは原則分離している。
応用
Scheme はしばしば他のアプリケーションの拡張用言語として使われる。代表的なアプリケーションには以下のようなものがある。
より専門的な応用としては、映画ファイナルファンタジーのために3Dレンダリングエンジンに Scheme インタプリタを組み込んだ例[10]や、リトルウイングのピンボールコンストラクションシステムの記述に Scheme を使った例[11]がある。
Android 用の App Inventor では、Scheme コンパイラである Kawa を使ってJava仮想マシン用のバイトコードを生成している。
出典
ラムダ論文一覧
Scheme が発表された一連の論文は、ラムダ論文と呼ばれている[12]。
年 | 題名 |
---|---|
1975年 | Scheme: An Interpreter for Extended Lambda Calculus[13][14] |
1976年 | Lambda: The Ultimate Imperative |
1976年 | Lambda: The Ultimate Declarative |
1977年 | Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO |
1978年 | The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two) |
1978年 | RABBIT: A Compiler for SCHEME |
1979年 | Design of LISP-based Processors, or SCHEME: A Dielectric LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode |
1980年 | Compiler Optimization Based on Viewing LAMBDA as RENAME + GOTO |
1980年 | Design of a Lisp-based Processor |
参考文献
- ガイ・スティール・ジュニア (1996), Scheme 過去◇現在◇未来 前編・後編
- ガイ・スティール・ジュニア (2006), The History of Scheme
- ジェラルド・サスマン、ガイ・スティール・ジュニア (1975), Scheme: An Interpreter for Extended Lambda Calculus
- ジェラルド・サスマン、ガイ・スティール・ジュニア (1976), Lambda: The Ultimate Imperative
- ガイ・スティール・ジュニア (1976), Lambda: The Ultimate Declarative
- ガイ・スティール・ジュニア (1977), Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO
- ジェラルド・サスマン、ガイ・スティール・ジュニア (1978), The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two)
- ガイ・スティール・ジュニア (1978), Rabbit: A Compiler for Scheme
- ジェラルド・サスマン、ガイ・スティール・ジュニア (1979), Design of LISP-based Processors, or SCHEME: A Dielectric LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode
- カール・ヒューイット (1967), PLANNER A Language for Proving Theorem
- ジェラルド・サスマン、テリー・ビノグラード (1970), Micro-Planner Reference Manual
- V・マクダモット、ジェラルド・サスマン (1972), The CONNIVER Reference Manual
- アイリーン・グライフ、カール・ヒューイット (1974), Actor Semantics of PLANNER-73
- ピーター・J・ランディン (1965), A Generalization of Jumps and Labels
- ヘイヨー・シーレッケ (1998), An Introduction to Landin’s “A Generalization of Jumps and Labels”
- ジョン・C・レイノルズ (1972), Denitional Interpreters for Higher-Order Programming Languages
- ジョエル・モーゼス (1970), The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem 和訳
脚注
注釈
- ^ 元々のALGOLには関数引数等が無いためFUNARG問題なども無く、静的スコープの歴史としてALGOLをあまり強調する意味は無い。
- ^ 英: closure
- ^ 英: lambda calculus
- ^ 英: tail-recursion
- ^ 英: continuation
- ^ 英: message passing
- ^ 英: continuation passing style、CPS
- ^ 継続渡し形式は一連のλ論文において導入された。ただし、体系として確立されてはいないものの、同様の手法は「John C. Reynolds (1972), Denitional Interpreters for Higher-Order Programming Languages」にもみられる。
- ^ 後の完全な Planner の実装として、エジンバラ大学の Julian Davies が POP-2 で実装した Popler がある。
- ^ 当初は
CATCH
という名称であった。 - ^ 英: escape operator
出典
- ^ 出典URL: https://small.r7rs.org/
- ^ “Influences - The Rust Reference”. The Rust Reference. 2023年4月18日閲覧。
- ^ “From LISP 1 to LISP 1.5”. www-formal.stanford.edu. 2024年4月8日閲覧。
- ^ 「Scheme 過去◇現在◇未来 前編」『bit』(共立出版)Vol. 28, No.4(1996年4月号) pp. 4~9
- ^ Baker, Henry G. (July 1978). “Shallow binding in Lisp 1.5”. Commun. ACM (New York, NY, USA: Association for Computing Machinery) 21 (7): 565–569. doi:10.1145/359545.359566. ISSN 0001-0782 .
- ^ 1178-1990 (Reaff 2008) IEEE Standard for the Scheme Programming Language. IEEE part number STDPD14209, unanimously reaffirmed at a meeting of the IEEE-SA Standards Board Standards Review Committee (RevCom), March 26, 2008 (item 6.3 on minutes), reaffirmation minutes accessed October 2009. NOTE: this document is only available for purchase from IEEE and is not available online at the time of writing (2009).
- ^ Michael Sperber ほか. “The Revised6 Report on the Algorithmic Language Scheme” (英語). 2009年2月2日閲覧。
- ^ “Position statement” (英語). 2013年12月16日閲覧。
- ^ “Scheme Working Groups” (英語). 2013年12月16日閲覧。
- ^ 川合史朗 (2002年10月). “Gluing Things Together - Scheme in the Real-time CG Content Production”. 2014年6月20日閲覧。
- ^ 藤田善勝. “YPSILON”. 2014年6月20日閲覧。
- ^ Online version of the Lambda Papers (PDF)
- ^ Sussman, Gerald Jay; Steele, Guy Lewis (1975). Scheme: An Interpreter for Extended Lambda Calculus (Report). Massachusetts Institute of Technology. hdl:1721.1/5794。
- ^ Sussman, Gerald Jay; Steele Jr, Guy L (1998). “Scheme: A interpreter for extended lambda calculus”. Higher-Order and Symbolic Computation (Springer) 11 (4): 405–439. doi:10.1023/A:1010035624696 .
関連項目
- アクターモデル
- 継続
- 末尾再帰
- SRFI
- 計算機プログラムの構造と解釈 - Scheme を用いた計算機科学分野の古典的な教科書。
外部リンク
scheme(スキーム)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/19 02:51 UTC 版)
「Uniform Resource Identifier」の記事における「scheme(スキーム)」の解説
URIはこの「スキーム」と呼ばれる識別子から始まり、省略できない。階層的識別子(Hierarchical Identifiers)である:(コロン)はスキームの区切り文字でスキーム名の最後に挿入する。スキーム名は文字で始まり、文字、数字、+(プラス記号)、-(ハイフン)、.(終止符)で構成される文字列となる。大文字と小文字を区別しないが、一貫性を保つために小文字の使用を推奨している。
※この「scheme(スキーム)」の解説は、「Uniform Resource Identifier」の解説の一部です。
「scheme(スキーム)」を含む「Uniform Resource Identifier」の記事については、「Uniform Resource Identifier」の概要を参照ください。
- schemeのページへのリンク