01:32:44)追加された行はこの色です。削除された行はこの色です。解いてある回答を見て学ぶために作ったページです。再帰的に解いてあると、関数言語だなーという気分になるのは、じぶんだけでしょうか?まだ、全問といていませんが、極力1日1問のペースで解いていこうとおもっています。ページが大きくなってきたので、32問目以降は下記のページに記載しています。こんにちは、みなさんお元気ですか。このページはプログラミング言語SCALAについてまとめたページです。SCALAはそのJavaアプリケーションをさらに効率よく開発する可能性を秘めています。Javaとほぼ完全な相互利用が可能な言語です。これまでの言語の集大成に近い言語です。そのため、各言語の優れた概念を取り入れているわけです。色々な言語の入門書をわたり歩くはめになります。Genericsの仕様策定にも参加しています。いうわけでSCALAはJava言語と親和性の高い関数型言語です。コンパイルするとJavaのクラスファイルになるんですよ。Javaのライブラリは膨大で他の言語に比べて日本語の処理方法がしっかりしています。コードが簡潔に書けるので生産性が高いといわれています。コーディングですみます。[#eccfd0df]英語のサイトであるが、情報が豊富である。検索エンジンで気になる単語を入れ検索すると、いろいろとScalaの記事が出てくる。[#i82a745f]-関数を生成して返す関数を定義できる-配列のパターンマッチング-XMLを簡単に扱える-多重継承ができるので、メソッドを部品のように扱えるJavaにはできないことができるのにJavaと親和性が高いのです。何らかの練習問題をこなすことで力がつくとおもいます。自分で解くことも大切ですが模範回答から学ぶことも大切です。回答をつかって学習していくページです。模範回答をみてえられる知識は実践向きの知識とも言えるかとおもいます。パズルゲームを解いていくような気分で1日1問を解説していければとおもっています。SCALAはコンパイルすると、JAVA言語のクラスを生成する関数型言語です。型推論を行ってくれるので、マスターすれば生産性が向上します。回答をみながら、ポイントをまとめていこうかという趣旨です。問題が出てくる毎にそのメソッドを紹介していきます。[#t5cff7df]sbazというインストーラからダウンロードします。Bazaars」です。DOSプロンプトで操作します。DOSのコメント行を意味しています。sbazのあるディレクトリにカレントディレクトリを移します。sbazを使えるようにします。ドキュメントをダウンロードします。scala-devel-docs下記のフォルダにAPI資料をダウンロードできます。1問目は、回答を自分の環境で実行させること自体が学びが大きいです。[#l78cdce7]-回答をP01.scalaというファイル名で保存します。.\P01.scalaと入力すると読み込んでくれます。[#xa5e1ff8]P01.last(List(1,2,3,4,5))です。片っ端からリストクラスを操作するメソッドを試したつわものがいました。使い方が大体わかるかも。バージョンは2.7ベースな点に注意。[#x7906894]ちなみに2.8のListのメソッド一覧は下記です。[#n5ca2709]2問とは関係ないのだが、今度はEclipseでSCALAを実行させてみたいとおもう。そのためには下記のプラグインをインストールすることが必要だ。下記のような実行用のメソッドを用意するといいでしょう。}***scalaは配列要素をパターンマッチできるようだ。::は配列の要素間の区切り文字である。[#n1cb2746].takeRight(2)()はapplyメソッドと同等らしいです。ややこしいが、その分応用できる箇所をすっきりと記述できる。ようにxと4が計算され結果が出力されるという感じだ。xとかyとかがなくても、次の書式で対応可能だ。{_+_}***foldLeft・foldRightは別名があり、それぞれ「/:」「:\」とも書ける。初期値が先頭にきている感じだ。()を閉じ終えてからくる()が、処理。List[T]()は初期値であり、空の配列である。**応用:Beanを定義する。[#hf8ee7ab]ここまでは、配列の中身が数値とかだったので、もう少し込み入った情報を扱いたい場合もあるかとおもいますので、Beanの扱いについて説明いたします。その前にオーバライトの書き方を紹介します。[#d7458651]defの前にoverrideをつけます。1行でもいけるでしょう。l.reverseだった。}-ただし、上記の例でバージョン2.7.7では意図した結果になるのに対して、2.8Betaだとcontinueのスコープがずれてしまい、別々の変数とみなされてしまいます。バクかなとおもって本家にバグ報告してみたところ下記の回答がかえってきました。**SCALAの本家から回答が帰ってきました。20).toStreamとすればよいようです。[#lb9151aa]配列の連結は先頭にしかできないのでどうしても末尾にしたい場合は、reverseをつかって先頭に追加してから、またreverseでもどしたりする。Errorだと、空配列しか受け付けない配列として宣言したことになるようです。いうエラーがかえってきます。[#h4071f02]クラスの型を正しく指定しないといけませんので指定します。行うような処理を簡潔に書くことができます。[#nc5cd2c6]ファイルから読み込んだ文字列の場合、いったん配列にしてやらないといけないだから文字列を配列に変換するメソッドをつくってみました。}別解:JavaのtoCharArrayをつかう例。これだけでもいいけどArray型になってしまうため、型変換メソッドも用意しました。//ArrayをList配列に変換します。//文字列を配列に変換します。動的関数をつかえば、簡潔に表現できます。}ファイルをcloseする箇所が省けているのがわかります。//ファイルをすべて読み配列で返します。シンプルになりました。[#pfa20fee]flatMapをつかいます。flatMapは基礎的メソッドです。}-flatmapもmapもArray()で行えば、Arrayをかえしますし、Listで行えばListをかえします。記号は左側にブロック変数を指定できるので重要です。ブロック変数はcaseによってリストのパターンごとの処理が可能になっています。[#v5207dcb]match処理内のcase処理部分でつかいます。Listとエラーになります。[#m0f568a4]Haskellでいうところのgroupメソッドとかなり類似した関数のようですね。最近、下記のようなところでもりあがっているのを知りました。http://wordprogress.org/archives/366それはさておき、ここの回答でつかわれているテクニックに焦点をあててみていきましょう。[#r04dde2d]ScalaもRubyのように多重代入ができるんですねぇ。***一致するシンボルと、それ以降を分離する。[#b07ff58f]spanをつかいます。[#d9f67211]えーっとここの問10の記事でバッチファイル作りなど、いろいろ脱線した記事を書いているので、無視してもらっていいです。前回で定義したメソッドと連携して最小限のメソッド実装で問題を解いていきますそのためには前回定義したメソッドをimportします。P09.packインポートするためには参照元の.scalaファイルがコンパイルされている必要があります。なくば、下記のエラーが出ます。今後プロジェクトでこの99の問題をコンパイルし続けるとディレクトリ内はソースとクラスファイルでごちゃごちゃになってしまいます。それを防ぐためには、ソースファイルとクラスファイルの出力先を分けたたほうがいいですし、そして問題の回答としてできてくる99個のファイルは一つのパッケージにしなきゃつらいですね。なると、package化の必要があります。<----出力フォルダで、いちいちscalacのオプションを書くのは面倒なのでバッチファイルをつくりました。拡張子の.scalaは省略してもいいようにしてあります。--ただし、jarファイルのクラスパスをまとめてコンパイルするにはさらなるクラスパスの追加が必要です。%CP%---setlocalはこのバッチファイルだけで有効なことを意味します。---ENABLEDELAYEDEXPANSIONを指定しないと、for文が並列で評価されてしまい、クラスパスが連結されません。いうサブディレクトリも検索対象にするオプションがあるはずですが、なぜか自分の環境(XP)では動作しませんでした。クラスパスの指定に偽ワイルドカードが使えるようになるようです。設定箇所はプロジェクトのディレクトリです。importするということは、ファイル同士に依存関係が出てくるということです。業務でつかうとなれば、ビルドツールのANTまたは、MAVENをつかったほうがよさそうです。[#p35eafcc]ダウンロードhttp://maven.apache.org/download.html仮に解凍したディレクトリの名称をmavenに変更して下記に設置したとします。C:\maven-環境変数を設定します。バッチファイルとrubyでつくったスクリプトを用意しました。なんで、rubyかって?単に簡潔に書けそうな気がしたからです。:PROCESS2--使い方---したに示したテキストファイル処理Rubyスクリプトがあることが前提のバッチファイルです。---プロジェクトフォルダがないことが前提です。#プロジェクト名を第一引数にとります。#パッケージ名を第2引数にとります。#バージョンを第3引数にとります。1#64行目から66行目をカットします。#以前のバージョン2.7.0を今のバージョンに置き換えます。このlaunchers要素を新規に作る。idとmainClassは必須。