トップ
新規
単語検索
ヘルプ
ScalaByExample_ja(draft)
をテンプレートにして作成
開始行:
[[Scala By Example:http://www.scala-lang.org/docu/files/S...
- [[プログラミング言語Scala:http://www.scala-lang.org/]]
- [[A Scala Tutorial for Java Programmer の和訳:http://ww...
*Chapter 1 - Introduction [#aabd46ff]
Scalaはオブジェクト指向と関数型のプログラミングをスムース...
- abstract typeとmixin compositionにより,オブジェクトと...
- クラス階層をまたがるパターンマッチングにより,関数型と...
- 柔軟な構文と型システムは先進的なライブラリとドメイン特...
同時に,ScalaはJavaと互換性があります.Javaのライブラリと...
この文書は,Scalaを一連の例題を通してインフォーマルな方法...
2章と3章はScalaを面白くする幾つかの機能について説明します...
Acknowledgement. AbelsonとSussmanの "[[Structure and Inte...
*Chapter 2 - A First Example [#d5aaa4e3]
最初の例題として,Scalaでのクイックソートの実装を次に示し...
def sort(xs: Array[Int]) {
def swap(i: Int, j: Int) {
val t = xs(i); xs(i) = xs(j); xs(j) = t
}
def sort1(l: Int, r: Int) {
val pivot = xs((l + r) / 2)
var i = l; var j = r
while (i <= j) {
while (xs(i) < pivot) i += 1
while (xs(j) > pivot) j -= 1
if (i <= j) {
swap(i, j)
i += 1
j -= 1
}
}
if (l < j) sort1(l, j)
if (j < r) sort1(i, r)
}
sort1(0, xs.length - 1)
}
この実装は誰かがJavaやCで書くものと極めて似ています.同じ...
- 定義は予約語で始まります.関数定義は ''def'' で始まり,...
- シンボルに宣言された型はシンボルとコロンの後に与えます...
- 配列型は T[] ではなく Array[T] と書き, 配列の要素の選...
- 関数は他の関数の内側にネストできます. ネストされた関数...
今までのところ,Scalaはいくつかの構文的な特徴を備えている...
しかしながら,プログラムを全く違って見えるやり方で書く事...
def sort(xs: Array[Int]): Array[Int] =
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
この関数型プログラムはクイックソートのエッセンスを簡潔な...
- もし配列が空か 中身が単一の要素だった場合,それはソート...
- もし配列が空でないならば,ピボットとして中間から要素を...
- 配列を,ピボットより小さいものと,大きいものを含んでい...
- 最初の2つの部分配列を,sort関数を再帰的に呼び出してソー...
- 3つの部分配列を結合させることで結果が得られます.
命令的な実装と関数的な実装の両方が同じ漸近的計算量をもっ...
関数的な実装は,Scalaが,配列の関数的な操作に特化している...
特に,引数として述語関数を取るメソッドfilterがあります....
def filter(p: T => Boolean) : Array[T]
ここで,T => Boolean は型 Tの要素をとり Booleanの値を返す...
Scalaは識別子と演算子の名前を区別しません.識別子は文字で...
クイックそーとプログラムにおいて,filterは無名関数に3回適...
最初の命令的なクイックソートの実装をもういちど詳細に見る...
例えば,+,-や<のような"標準の"二項演算子は何ら特別なやり...
効率とエラー診断のためにwhileループはScalaのプリミティブ...
def While (p: => Boolean) (s: => Unit) {
if (p) { s ; While(p)(s) }
}
While関数はテスト関数を1つめの引数として取ります.この関...
ScalaのUnit型はだいたいJavaのvoid型に対応します; これは...
def swap(i: Int, j: Int) {
val t = xs(i); xs(i) = xs(j); xs(j) = t
()
}
この関数の結果は単に最後の式です - ''return'' キーワード...
*Chapter 3 - Programming with Actors and Messages [#gae93...
*Chapter 4 - Expressions and Simple Functions [#ycc4bd2b]
これまでの例題はScalaで何ができるかの印象を与えました.こ...
**4.1 Expressions and Simple Functions [#u1f8933d]
Scalaシステムにはファンシーな計算機(calculator)のようなイ...
scala> 87 + 145
unnamed0: Int = 232
scala> 5 + 2 * 3
unnamed1: Int = 11
scala> "hello" + " world!"
unnamed2: java.lang.String = hello world!
部分式に名前をつけてあとから式の代わりにその名前を使うこ...
scala> def scale = 5
scale: Int
scala> 7 * scale
unnamed3: Int = 35
scala> def pi = 3.141592653589793
pi: Double
scala> def radius = 10
radius: Int
scala> 2 * pi * radius
unnamed4: Double = 62.83185307179586
定義は予約語 ''def'' ではじまります;定義は=記号に続く式...
''def'' x = e のような定義を実行しても式eは評価されません...
式はどのように評価されるのでしょうか?演算子とオペランド...
- いちばん左の操作(operation)を選ぶ
- そのオペランドを評価する
- オペランドの値に演算子(operator)を適用する
''def'' で定義された名前は(未評価の)定義の右手に置き換え...
*** Example 4.4.1 [#o15287f9]
ここで数式の評価のようすを示します.
(2 * pi) * radius
→ (2 * 3.141592653589793) * radius
→ 6.283185307179586 * radius
→ 6.283185307179586 * 10
→ 62.83185307179586
**4.2 Parameters [#vf3666c3]
''def'' を使って,パラメータを取る関数も定義できます.例...
scala> def square(x: Double) = x * x
square: (Double)Double
scala> square(2)
unnamed0: Double = 4.0
scala> square(5 + 3)
unnamed1: Double = 64.0
scala> square(square(4))
unnamed2: Double = 256.0
scala> def sumOfSquares(x: Double, y: Double) = square(x...
sumOfSquares: (Double,Double)Double
scala> sumOfSquares(3, 2 + 2)
unnamed3: Double = 25.0
関数のパラメータは関数名の後に続き,カッコで囲まれます....
(続き p. 13 Functions with parameters are ... から)
----
(けいご)
終了行:
[[Scala By Example:http://www.scala-lang.org/docu/files/S...
- [[プログラミング言語Scala:http://www.scala-lang.org/]]
- [[A Scala Tutorial for Java Programmer の和訳:http://ww...
*Chapter 1 - Introduction [#aabd46ff]
Scalaはオブジェクト指向と関数型のプログラミングをスムース...
- abstract typeとmixin compositionにより,オブジェクトと...
- クラス階層をまたがるパターンマッチングにより,関数型と...
- 柔軟な構文と型システムは先進的なライブラリとドメイン特...
同時に,ScalaはJavaと互換性があります.Javaのライブラリと...
この文書は,Scalaを一連の例題を通してインフォーマルな方法...
2章と3章はScalaを面白くする幾つかの機能について説明します...
Acknowledgement. AbelsonとSussmanの "[[Structure and Inte...
*Chapter 2 - A First Example [#d5aaa4e3]
最初の例題として,Scalaでのクイックソートの実装を次に示し...
def sort(xs: Array[Int]) {
def swap(i: Int, j: Int) {
val t = xs(i); xs(i) = xs(j); xs(j) = t
}
def sort1(l: Int, r: Int) {
val pivot = xs((l + r) / 2)
var i = l; var j = r
while (i <= j) {
while (xs(i) < pivot) i += 1
while (xs(j) > pivot) j -= 1
if (i <= j) {
swap(i, j)
i += 1
j -= 1
}
}
if (l < j) sort1(l, j)
if (j < r) sort1(i, r)
}
sort1(0, xs.length - 1)
}
この実装は誰かがJavaやCで書くものと極めて似ています.同じ...
- 定義は予約語で始まります.関数定義は ''def'' で始まり,...
- シンボルに宣言された型はシンボルとコロンの後に与えます...
- 配列型は T[] ではなく Array[T] と書き, 配列の要素の選...
- 関数は他の関数の内側にネストできます. ネストされた関数...
今までのところ,Scalaはいくつかの構文的な特徴を備えている...
しかしながら,プログラムを全く違って見えるやり方で書く事...
def sort(xs: Array[Int]): Array[Int] =
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
この関数型プログラムはクイックソートのエッセンスを簡潔な...
- もし配列が空か 中身が単一の要素だった場合,それはソート...
- もし配列が空でないならば,ピボットとして中間から要素を...
- 配列を,ピボットより小さいものと,大きいものを含んでい...
- 最初の2つの部分配列を,sort関数を再帰的に呼び出してソー...
- 3つの部分配列を結合させることで結果が得られます.
命令的な実装と関数的な実装の両方が同じ漸近的計算量をもっ...
関数的な実装は,Scalaが,配列の関数的な操作に特化している...
特に,引数として述語関数を取るメソッドfilterがあります....
def filter(p: T => Boolean) : Array[T]
ここで,T => Boolean は型 Tの要素をとり Booleanの値を返す...
Scalaは識別子と演算子の名前を区別しません.識別子は文字で...
クイックそーとプログラムにおいて,filterは無名関数に3回適...
最初の命令的なクイックソートの実装をもういちど詳細に見る...
例えば,+,-や<のような"標準の"二項演算子は何ら特別なやり...
効率とエラー診断のためにwhileループはScalaのプリミティブ...
def While (p: => Boolean) (s: => Unit) {
if (p) { s ; While(p)(s) }
}
While関数はテスト関数を1つめの引数として取ります.この関...
ScalaのUnit型はだいたいJavaのvoid型に対応します; これは...
def swap(i: Int, j: Int) {
val t = xs(i); xs(i) = xs(j); xs(j) = t
()
}
この関数の結果は単に最後の式です - ''return'' キーワード...
*Chapter 3 - Programming with Actors and Messages [#gae93...
*Chapter 4 - Expressions and Simple Functions [#ycc4bd2b]
これまでの例題はScalaで何ができるかの印象を与えました.こ...
**4.1 Expressions and Simple Functions [#u1f8933d]
Scalaシステムにはファンシーな計算機(calculator)のようなイ...
scala> 87 + 145
unnamed0: Int = 232
scala> 5 + 2 * 3
unnamed1: Int = 11
scala> "hello" + " world!"
unnamed2: java.lang.String = hello world!
部分式に名前をつけてあとから式の代わりにその名前を使うこ...
scala> def scale = 5
scale: Int
scala> 7 * scale
unnamed3: Int = 35
scala> def pi = 3.141592653589793
pi: Double
scala> def radius = 10
radius: Int
scala> 2 * pi * radius
unnamed4: Double = 62.83185307179586
定義は予約語 ''def'' ではじまります;定義は=記号に続く式...
''def'' x = e のような定義を実行しても式eは評価されません...
式はどのように評価されるのでしょうか?演算子とオペランド...
- いちばん左の操作(operation)を選ぶ
- そのオペランドを評価する
- オペランドの値に演算子(operator)を適用する
''def'' で定義された名前は(未評価の)定義の右手に置き換え...
*** Example 4.4.1 [#o15287f9]
ここで数式の評価のようすを示します.
(2 * pi) * radius
→ (2 * 3.141592653589793) * radius
→ 6.283185307179586 * radius
→ 6.283185307179586 * 10
→ 62.83185307179586
**4.2 Parameters [#vf3666c3]
''def'' を使って,パラメータを取る関数も定義できます.例...
scala> def square(x: Double) = x * x
square: (Double)Double
scala> square(2)
unnamed0: Double = 4.0
scala> square(5 + 3)
unnamed1: Double = 64.0
scala> square(square(4))
unnamed2: Double = 256.0
scala> def sumOfSquares(x: Double, y: Double) = square(x...
sumOfSquares: (Double,Double)Double
scala> sumOfSquares(3, 2 + 2)
unnamed3: Double = 25.0
関数のパラメータは関数名の後に続き,カッコで囲まれます....
(続き p. 13 Functions with parameters are ... から)
----
(けいご)
ページ名: