プログラミング言語 Scalaat TECH
プログラミング言語 Scala - 暇つぶし2ch782:デフォルトの名無しさん
09/03/27 22:06:29
>>778
全然そうは思わない。ScalaはScala、関数型言語ではない。

783:デフォルトの名無しさん
09/03/27 22:13:56
>>780
>>782
Scalaと関数型言語の特性については無知だったようですまねぇ

でもね、俺みたいな2次請け3次請けで働いてるプログラマってプログラマの多数派なわけじゃん
そんな多数派の「現場」ではRubyすら使われる気配がないし、ましてや関数型言語なんて採用されるわけがない
ってことを言いたかっただけなんだが

784:デフォルトの名無しさん
09/03/27 22:29:12
>>783
ごめん。言いすぎた。
言うようになかなか採用されないと思ってるよ。

785:デフォルトの名無しさん
09/03/27 22:35:34
Scalaは関数型言語ではなくて、
関数型言語の機能、特徴[も]兼ね備えている言語。
今では特に珍しいことではない。

URLリンク(www.scala-lang.org)
Introducing Scala
> It smoothly integrates features of object-oriented and functional
languages

URLリンク(www.scala-lang.org)
Learning Scala
> If you come to Scala with a functional programming background
> you will find most of the more advanced functional programming
style familiar.

URLリンク(www.scala-lang.org)
Book "Programming Scala"
> "Programming Scala" will show you the fundamentals of functional programming using Scala.


786:デフォルトの名無しさん
09/03/27 22:41:01
ちょっと件のページのデータを踏襲した例を作ってみた。
まずこれは再帰を使ってるけど手続きっぽいでしょ。resultが順次更新されていくから。

import scala.xml._
import scala.collection.mutable._

val result = new ArrayBuffer[Node]
def find1(node: Node)(pred: Node => Boolean): Unit = {
if (pred(node)) result += node
for (child <- node.child) find1(child)(pred)
}
find1(xml) { case <file>{_*}</file> => true; case _ => false }

こうするとちょっと関数型っぽくなる。

def find2(node: Node)(pred: Node => Boolean): List[Node] = {
if (pred(node)) List(node)
else node.child.toList.map(find2(_)(pred)).flatten[Node]
}
val result = find2(xml) { case <file>{_*}</file> => true; case _ => false }

find2は便利メソッドのflatMapを使ってこう書いても同じ。

def find3(node: Node)(pred: Node => Boolean): List[Node] = {
if (pred(node)) List(node)
else node.child.toList.flatMap(find3(_)(pred))
}

787:デフォルトの名無しさん
09/03/27 22:50:18
>>773
関数型言語の勉強なら「プログラミングの基礎」がいいよ。
URLリンク(www.amazon.co.jp)

788:デフォルトの名無しさん
09/03/27 23:01:52
Scalaは関数型の要素抜きのGood Javaで使っても結構いい線いけてるから、
なかなか関数型まで行き着かないんだよね。
同じJavaVMで動くといってもJavaと食い合う言語だなと思ったよ。
確かに関数型だけを学びたいならHaskellやML系の言語を先にやったほうが手っ取り早いかもしれない。

789:デフォルトの名無しさん
09/03/27 23:10:13
OCaml亜種のF#がC#や他の.NETグループの言語と組み合わせる前提の
設計になってるのと対比すると特徴的だな。

790:デフォルトの名無しさん
09/03/28 09:22:03
URLリンク(jp.techcrunch.com)
コンパイルしたScalaもつかえそう。

791:デフォルトの名無しさん
09/03/28 09:40:47
いや、当然APIが制限されてるって。
Python版がそうであるように。



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch