R6RS:翻訳:R6RS:1 Overview of Scheme

R6RS:翻訳:R6RS:1 Overview of Scheme

1 章 Scheme の概観

本章では Scheme の意味論の概観を示す。この目的は、リファレンスマニュアルとして構成されている本報告書の後続の章の理解を容易にするために充分に基本概念について説明することにある。したがって、この概観は本言語の完全な入門ではないし、すべての箇所において精確でもないし、すべての方法において規範的でもない。

Algol と同様、 Scheme は静的スコープの言語である。各々の変数の使用は字句上の見掛けにおけるその変数の束縛と対応する。

Scheme には明確な型とは対照的に潜在的な型がある [28]。型は変数ではなくオブジェクト(値とも呼ぶ)に対応づけられる(潜在的な型を持つ言語を言うのに、型がない、弱く型付けされた、動的に型付けされた言語と言う人もある)。潜在的な型を持つ言語には他に Python、 Ruby、 Smalltalk、 それからその他の Lisp 方言がある。明確な型のある言語(時に、強く型付けされた言語、静的に型付けされた言語と言われる)には Algol 60、 C、 C#、 Java、 Haskell、 ML がある。

Scheme で計算中に作成されたオブジェクトはすべて、手続きや継続も含めて、無限の存続期間を持つ。 Scheme のオブジェクトは破棄されることがない。 Scheme の実装系が(通常は!)記憶領域を使い果たさないのは、あるオブジェクトが将来の計算で何ら問題になる可能性のないことが証明できれば、そのオブジェクトの使用している記憶領域を回収することを認められているからである。ほとんどのオブジェクトが無制限の存続期間を持つ他の言語には、 C#、 Java、 Haskell、 ほとんどの Lisp 方言、 ML、 Python、 Ruby、 Smalltalk がある。

Scheme の実装は真正末尾再帰的でなければならない。これにより、繰り返し計算が構文上は再帰的な手続きで記述されていても、それを一定の空間で実行することができるようになる。したがって、真正末尾再帰的な実装系では繰り返しを一般的な手続き呼び出しの仕組みで表現することができ、特別な繰り返し構文は構文糖衣としてのみ有用になるのである。

Scheme は手続き自体をオブジェクトとしてサポートした最初の言語のひとつである。手続きを動的に作成することができ、データ構造に格納することができ、手続きの戻り値として返すといったようなことができる。このような性質のある言語には他に Common Lisp、 Haskell、 ML、 Ruby、 Smalltalk がある。

Scheme の特徴的な機能は(他のほとんどの言語では背後で操作されるだけの)継続もまた「第一級」の地位を持つことである。第一級の継続は、大域脱出、バックトラック、コルーチンといった、先進的な制御構造を実装するのに有用である。

Scheme では、手続きが評価結果を必要とするかしないかにかかわらず、手続きに制御が移る前にその引き数式が評価される。 C、C#、Common Lisp、Python、Ruby、Smalltalk は手続きを起動する前に常に引き数を評価する別の言語である。これは Haskell の遅延評価の意味論や、 Algol 60 の名前呼び出しの意味論とは異なるものであり、それらの意味論では、引き数式はその値が手続きにより必要とされるまで計算されない。

Scheme の算術演算のモデルでは豊富な数値型とそれに対する演算を提供している。さらに、正確な数と不正確な数を区別する。基本的には、正確数オブジェクトはある数に厳密に対応し、不正確数オブジェクトは丸めやその他の誤差を伴う計算の結果である。

  1. R6RS:翻訳:R6RS:1.1 Basic types
  2. R6RS:翻訳:R6RS:1.2 Expressions
  3. R6RS:翻訳:R6RS:1.3 Variables and binding
  4. R6RS:翻訳:R6RS:1.4 Definitions
  5. R6RS:翻訳:R6RS:1.5 Forms
  6. R6RS:翻訳:R6RS:1.6 Procedures
  7. R6RS:翻訳:R6RS:1.7 Procedure calls and syntactic keywords
  8. R6RS:翻訳:R6RS:1.8 Assignment
  9. R6RS:翻訳:R6RS:1.9 Derived forms and macros
  10. R6RS:翻訳:R6RS:1.10 Syntactic data and datum values
  11. R6RS:翻訳:R6RS:1.11 Continuations
  12. R6RS:翻訳:R6RS:1.12 Libraries
  13. R6RS:翻訳:R6RS:1.13 Top-level programs

Last modified : 2008/11/07 21:40:19 UTC