(訳)Scheme簡明チュートリアル2-データ型の単純データ型


第二章データ型
データ型は、関連する値情報セットのセットです.様々なデータ型は相互に関連しており、通常は階層関係を有しています.Schemeは豊富なデータ型を持っています:いくつかは簡単なタイプで、いくつかの複合タイプは他のタイプから組み合わせられています.
2.1単純なデータ型
Schemeの単純さには、booleans(ブールタイプ)、numbers(数値タイプ)、characters(文字タイプ)、symbols(識別子タイプ)が含まれます.
2.1.1     Booleans
Schemeのbooleansタイプはtrueとfalseをそれぞれ#t,#fで表す.Schemeはbooleanという名前を持っていますか?のプロシージャを使用して、パラメータがbooleanタイプであるかどうかを検出できます.
(boolean? #t)              =>  #t
(boolean? "Hello, World!") =>  #f

notプロシージャは、パラメータの逆の値をbooleanタイプの結果として直接取得します.
(not #f)              =>  #t
(not #t)              =>  #f
(not "Hello, World!") =>  #f

最後の式はSchemeの利便性を明確に示しています.booleanタイプが必要なコンテキストでは、Schemeはf以外の値をtrueと見なします.
2.1.2     Numbers
Schemeのnumbersタイプは、integers(例えば42)、rationals(例えば22/7)、reals(実数、例えば3.14159)、またはcomplex(複数、2+3 i)であってもよい.1つの整数は有理数であり、1つの有理数は実数であり、1つの実数は1つの複素数であり、1つの複素数は1つの数字である.Schemeには、様々な数字でタイプを判断できるプロセスがあります.
(number? 42)       =>  #t
(number? #t)       =>  #f
(complex? 2+3i)    =>  #t
(real? 2+3i)       =>  #f
(real? 3.1416)     =>  #t
(real? 22/7)       =>  #t
(real? 42)         =>  #t
(rational? 2+3i)   =>  #f
(rational? 3.1416) =>  #t
(rational? 22/7)   =>  #t
(integer? 22/7)    =>  #f
(integer? 42)      =>  #t

Schemeのintegers(整数)は必ずしも10進数フォーマットである必要はありません.2進数は、数字の前に接頭辞#bを付けることによって規定することができる.これで#b 1100は10進数12になります.8進数および16進数フォーマットを実現するプレフィックスは、それぞれ#oおよび#xである.(decimal接頭辞dはオプション)
汎用的な等しい判断プロセスeqvを使用することができますか?と入力します.(eqv?ちょっと似たような引用の等しい判断ReferenceEquals)
(eqv? 42 42)   =>  #t
(eqv? 42 #f)   =>  #f
(eqv? 42 42.0) =>  #f

ただし、比較に関与するパラメータがすべて数値であることを知っていれば、数値の等しい判断に特化した=を選択するとより適切です.(=号演算の場合は必要に応じてパラメータをタイプ変換します(=42"42")演算結果は#t)
(= 42 42)   =>  #t
(= 42 #f)   -->ERROR!!!
(= 42 42.0) =>  #t

その他の数値比較には、<,<=,>,>=
(< 3 2)    =>  #f
(>= 4.5 3) =>  #t

+,-,*,/,exptなどの数学演算プロセスは,我々が期待する機能を有する.
(+ 1 2 3)    =>  6
(- 5.3 2)    =>  3.3
(- 5 2 1)    =>  2
(* 1 2 3)    =>  6
(/ 6 3)      =>  2
(/ 22 7)     =>  22/7
(expt 2 3)   =>  8
(expt 4 1/2) =>  2.0

1つのパラメータの場合、-および/プロシージャはそれぞれ反数と逆数の結果を得ます.
maxプロシージャとminプロシージャは、それぞれに与えられたパラメータの最大値と最小値を返します.任意の数字をサポートできます.
(max 1 3 4 2 3) =>  4
(min 1 3 4 2 3) =>  1

absプロシージャは、パラメータに提供される絶対値を返します.
(abs  3) =>  3
(abs -4) =>  4

 


これらはまだ氷山の一角にすぎない.Schemeは豊富な数学と三角演算過程を提供している.たとえばatan,exp,sqrtなどのプロセスは,パラメータの余剰,自然反対数,開方値をそれぞれ返す.その他のより具体的な数学演算プロセスの情報は、Revised^5 Report on the Algorithmic Language Schemeを参照してください.
2.1.3     Characters
Schemeにおける文字型データは、文字の前に#接頭辞を付けることで表される.#cのように文字cを表します.非可視文字には、#ewline、#tabなどの記述名が追加されます.スペース文字は#、またはより読みやすい#spaceと書くことができます.
文字タイプ判定プロセスはchar?:
(char? #\c) =>  #t
(char? 1)   =>  #f
(char? #\;) =>  #t

データのセミコロン文字はコメントを起こさないことに注意してください.
文字型データには独自の比較判断プロセスがあります:char=?char?, char>=?
(char=? #\a #\a)  =>  #t
(char<? #\a #\b)  =>  #t
(char>=? #\a #\b) =>  #f

大文字と小文字を無視した比較を実現するには、charプロシージャの代わりにchar-ciプロシージャを使用します.
(char-ci=? #\a #\A) =>  #t
(char-ci<? #\a #\B) =>  #t

タイプ変換プロセスはchar-downcaseとchar-upcaseです.
(char-downcase #\A) =>  #\a
(char-upcase #\a)   =>  #\A

2.1.4     Symbols
前に見た簡単なデータ型はすべて自己演算です.つまり、コマンドプロンプトの後にこれらのタイプのデータを入力すると、入力内容と同じ結果が返されます.
#t  =>  #t
42  =>  42
#\c =>  #\c

Symbolsには同じ表現はありません.これはsymbolsが通常Schemeプログラムで変数の識別として用いられ,変数が担持する値を演算できるためである.しかしsymbolsは単純なデータ型であり、characers、numbers、および他のタイプのデータと同様にSchemeで伝達できる有効な値タイプである.
変数ではなく単純なsymbolを作成する場合は、quoteプロシージャを使用します.
(quote xyz)
=>  xyz

Schemeではよくこのタイプを引用するので、もっと簡単な方法があります.式'Eと(quote E)はSchemeで等価である.
Schemeのsymbolsは文字列でコマンドされます.characters、booleans、numbers、または複合タイプなど、名前を付けるときに他のタイプのデータと競合しないでください.this-is-a-symbol,i 18 n,<=>,および$!#*いずれもsymbolsであり、16,1+2 i,#t,'this-is-a-stringおよび'(「hello」「world」)はsymbolsタイプデータ('(「hello」「world」)ではなく、2つの文字列のみを含むリストである.symbolsタイプのデータをチェックするプロセスはsymbolですか?
(symbol? 'xyz) =>  #t
(symbol? 42)   =>  #f

Schemeのsymbolsタイプは通常、大文字と小文字を区別しません.だからCalorieとcalorieは等価です
(eqv? 'Calorie 'calorie)
=>  #t

また、defineを使用してsymbolタイプのxyzなどのデータをグローバル変数として使用することもできます.
(define xyz 9)

これにより、値9の変数xyz.を作成できます.Schemeコマンドプロンプトに直接xyzを入力すると、xyzの値が演算結果になります.
xyz
=>  9

xyzの値を変更したい場合はsetを使用します!実装:
(set! xyz #\c)

xyzの値は文字#cです.
xyz
=>  #\c