トップページ⇒tech
1001コメント329KB

プログラミング言語 Scala 7冊目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/09/04(日) 20:07:34.70
The Scala Programming Language
ttp://www.scala-lang.org/

■リンク集
ttp://sites.google.com/site/scalatohoku/%E5%8B%89%E5%BC%B7%E4%BC%9A%E8%B3%87%E6%96%99

■前スレ
プログラミング言語 Scala 6冊目
ttp://hibari.2ch.net/test/read.cgi/tech/1307416864/

■Scalaの紹介文(さわり)
Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25

■Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Proの連載記事、各々で開かれた勉強会の資料などがあります。
0655 ◆CgacaMDhSQ 2011/12/08(木) 00:07:56.99
>>654
あ、申し訳ない。なんか別のを貼ってしまったようだ。こっちが正しい
https://gist.github.com/1443062
それで、よくわからないところがちょっと。無名パッケージを使うときって、
使い捨てのコードくらいというのが普通の認識なんだけど、無名パッケージの
package privateなstatic 変数にScalaからアクセスしたいというのはどういう状況なんでしょうか?
0656デフォルトの名無しさん2011/12/08(木) 00:20:10.76
仕事で使っているライブラリがちょっと特殊なんですよ…

しかしscalaとjavaの相互運用はなかなか微妙なんですね。
ちょっと自分のscalaのレベルでは併用は早過ぎたようです。
0657 ◆CgacaMDhSQ 2011/12/08(木) 00:38:01.59
>>656
>仕事で使っているライブラリがちょっと特殊なんですよ…
なるほど。しかし、それってちょっとというかかかなり特殊なのでは?
それでもあえてやるなら、リフレクション使う、という手はありますが…

scalaとjavaの相互運用が微妙かというと、微妙な点はいくつかありますが、多くの
ケースで十分に上手くいく、というのが自分の認識です。現時点すら相互運用
のために色々妥協しているのに、100%の相互運用を目指すのはScalaにとっては
自殺行為じゃないかと
0658デフォルトの名無しさん2011/12/08(木) 08:08:58.22
みずしまさんAdvent Calendarは?
0659 ◆CgacaMDhSQ 2011/12/08(木) 08:33:10.54
>>658
今確認しました。あれ、自己申告制だと思ってたので、12/07に割り振られてたのに
気づきませんでした。今日明日くらいに書くのでご勘弁を
0660 ◆CgacaMDhSQ 2011/12/08(木) 09:41:18.73
というわけで、ちょっとテキトーですが、Advent Calendarの記事アップしました。
https://gist.github.com/1445310
0661デフォルトの名無しさん2011/12/08(木) 13:25:08.85
scala使ってる人のことなんて言うの?scalaer?
0662デフォルトの名無しさん2011/12/08(木) 15:28:52.53
スカリスト
0663デフォルトの名無しさん2011/12/08(木) 16:29:33.34
Scala, Scaler, Scalistの順で位が高くなります。
0664デフォルトの名無しさん2011/12/08(木) 18:03:25.86
Scalizerに変身できるようになると一人前。
0665デフォルトの名無しさん2011/12/08(木) 23:51:10.70
スカラマニア
0666デフォルトの名無しさん2011/12/09(金) 07:15:03.23
微妙だな。
0667デフォルトの名無しさん2011/12/09(金) 18:13:50.51
スカリー
0668デフォルトの名無しさん2011/12/09(金) 18:33:53.15
このスレ、コードがほとんど書き込まれてないんですが。
0669デフォルトの名無しさん2011/12/09(金) 19:27:30.97
気付いたか…
0670デフォルトの名無しさん2011/12/09(金) 20:12:18.61
どや
val fileText = io.Source.fromFile("data.txt").mkString
val (passed, failed) = List(49, 58, 76, 82, 88, 90) partition ( _ > 60 )
0671デフォルトの名無しさん2011/12/09(金) 22:43:34.85
def prime: Stream[Int] = {
def prime1(n: Stream[Int]): Stream[Int] = n.head #:: prime1(n.tail filter (_ % n.head != 0))
prime1(Stream from 2)
}

素数を求めるプログラム
面接で書けと言われたらとっさに書けないよねw
0672デフォルトの名無しさん2011/12/09(金) 22:47:18.00
コードはかけそうだが、計算量は?って聞かれたらつまると思う。
0673デフォルトの名無しさん2011/12/10(土) 00:19:58.17
Streamって何?
0674デフォルトの名無しさん2011/12/10(土) 01:08:20.38
止まらないことさ
0675デフォルトの名無しさん2011/12/10(土) 01:13:40.92
嫁
http://eed3si9n.github.com/scala-collections-doc-ja/
http://eed3si9n.github.com/scala-collections-doc-ja/collections_14.html
0676デフォルトの名無しさん2011/12/10(土) 10:38:14.32
大学の課題で少し質問させてください

val cmd = "val x = 0"
といった感じにscalaで実行させたいコマンドが文字列で格納されている場合に
簡単に格納されているコマンドを実行する方法はないでしょうか?
(Compiler APIは使い方がいまいち分かりません。。。)
0677デフォルトの名無しさん2011/12/10(土) 11:13:01.40
今日は13時から第二回Scala会議
http://partake.in/events/7b7f6551-8683-4968-855f-f8a62ec4bc93
ust
http://www.ustream.tv/channel/scala-kaigi
ニコ生
http://live.nicovideo.jp/gate/lv72707765
0678nat-pool-nrt-u1.redhat.com2011/12/10(土) 12:56:57.39
てst
0679デフォルトの名無しさん2011/12/10(土) 15:02:35.79
みなさんマサカリ投げすぎですよ
0680デフォルトの名無しさん2011/12/10(土) 15:14:44.25
コネー
0681デフォルトの名無しさん2011/12/10(土) 16:41:10.87
>>677
お昼寝してたら寝過ごしたけど、どうだった?
0682デフォルトの名無しさん2011/12/10(土) 16:44:14.00
>>671
見た目は洒落てるけど、結局_ % n.head != 0なんだな。素数だから仕方ないか
0683デフォルトの名無しさん2011/12/10(土) 16:49:00.55
>>676
val settings = new scala.tools.nsc.Settings { usejavacp.value = true }
val main = new scala.tools.nsc.interpret.IMain(settings)
main.interpret("val x = 0")
val x = main.valueOfTerm("x") //Option[AnyRef]で帰ってくるので適当に取り出す

……でいけるはずなんだけど、
2.9.1のREPLで試してみたらmain.valueOfTerm("x")がNoneになっちゃうな
なんでだろ
0684デフォルトの名無しさん2011/12/10(土) 18:29:06.33
大学の課題ってム板のネタなの?
こんな課題出るわけないと思うんだけどw
Twitterのutil-eval使うか参考にすれば?
0685デフォルトの名無しさん2011/12/10(土) 19:08:30.11
>>683
ありがとうございます。
私も某ページに文字列をeval化するサンプルがあったので
それを参考にやってみたのですが、2.9.1で試したところ同じくNoneが帰ってきていました。。

>>684
さすがにこの内容そのものが出たわけではないですww
やはりutil-evalを参考にするのが正しいんでしょうね、ありがとうございます。
0686デフォルトの名無しさん2011/12/10(土) 23:36:11.45
>>685
処理系自分で作れじゃなくて、Lisp系でもなくてそういう課題が出るってどんなせめた講義なのかきになる。
0687デフォルトの名無しさん2011/12/11(日) 17:55:11.97
Scalaは死んじゃうの?
0688デフォルトの名無しさん2011/12/11(日) 18:01:05.49
それが定めならね・・・
0689デフォルトの名無しさん2011/12/11(日) 18:10:54.14
バルス
0690デフォルトの名無しさん2011/12/11(日) 18:11:48.96
何度でもよみがえるさ
Scalaの力こそ人類の夢だからだ
って書こうとしたら先にオチが…
0691デフォルトの名無しさん2011/12/11(日) 20:10:41.40
scalaのvalって定義時に前方参照してもコンパイル通るけど、
実行時に例外で落ちることがあるね。
PackratParserを使って構文定義を書いてはまった。

ただ、常に落ちるわけではないのがよくわからない。
どうもval x = yみたいな単純コピーは危ないみたい。
0692デフォルトの名無しさん2011/12/11(日) 20:14:49.26
「Scalaが難しい」という批判がある時に、
1. 書きたいことを冗長あるいは複雑にしている。
2. 学習・教育コストが高い。
の二つがある。

言語オタクは1ばかり語りたがるが、一般人は2にしか関心ないよ。
エヴァンジェリストの諸君は、そこを勘違いしちゃダメだ。
0693デフォルトの名無しさん2011/12/11(日) 20:50:55.92
言語オタクはその二つしか語りたがらないから駄目だ
0694デフォルトの名無しさん2011/12/11(日) 21:37:17.76
他に何かあるか?
0695 ◆CgacaMDhSQ 2011/12/11(日) 22:06:25.27
>>691
そういう覚え方は逆に危ないです。valが危ないわけではなくて、パーザコンビネータでは、その性質上、
val同士の相互参照が発生し得るので、それを意識してないと問題になるという話です。普通にvalを書く分に
何か危険があるわけではないです。ちなみに、そういう理由もあって、パーザコンビネータの規則には
lazyを付けることが多いです。
0696デフォルトの名無しさん2011/12/11(日) 22:47:17.69
そのときは、valの順序を変えただけで解決したので深く考えませんでした。
val の順序を変えることで相互参照が断ち切れたのでしょうか?
0697デフォルトの名無しさん2011/12/14(水) 12:11:06.62
板移転してたのか
0698デフォルトの名無しさん2011/12/14(水) 13:07:23.41
第二回Scala会議のタイムシフト見てるけど、コメントのレベル低すぎだろ
スキーマが何なのか知ってるやつが誰もいないとか
そこらのプログラマはXMLとか触ったことすらないのか
0699デフォルトの名無しさん2011/12/14(水) 13:19:27.04
?
0700デフォルトの名無しさん2011/12/14(水) 19:04:05.00
>スキーマ
何のだろう?
>XMLの

XMLのデータ定義なんて
あんまり気にしないだろう。

SOAPのWSDLやCouch/MongoみたいなDBというキーワードが出ない限り。
0701デフォルトの名無しさん2011/12/14(水) 19:32:39.57
あの放送を見たら普通はコメントより先に発言者のレベルを心配するだろ
0702デフォルトの名無しさん2011/12/14(水) 19:56:18.02
だな
0703デフォルトの名無しさん2011/12/14(水) 20:05:50.58
発言者が駄目でも何を言ってるかはわかるだろ
この間のドワンゴ勉強会より内容の難易度は落ちてると思うが、見てるやつのレベルはもっと落ちてた
Scalaを難しいと言ってるやつの程度がよくわかったよ
0704デフォルトの名無しさん2011/12/14(水) 20:11:16.16
Scalaは間違いなく難しいと言っていたきしださんの発表が
一番まともなだったというのは皮肉だなw
0705デフォルトの名無しさん2011/12/14(水) 20:14:42.48
勉強会なんてあんなもんでしょ
期待してない
0706デフォルトの名無しさん2011/12/15(木) 03:35:33.98
格下蔑んでる暇があったらコード書けよカスども
0707デフォルトの名無しさん2011/12/15(木) 20:17:08.13
scalaの終焉が近いというのはinfoQのあの記事から感じること
0708デフォルトの名無しさん2011/12/15(木) 20:28:53.27
お、おう・・・
0709デフォルトの名無しさん2011/12/16(金) 04:03:16.78
一人Scalaz Advent Calendar
http://partake.in/events/4b3afdc8-e4ec-4010-b8ec-31b89210dda0

これ一通り読んだけど、すごくわかりやすくて勉強になった
プログラム例がしっかりしてるのと、簡単なものから順番に紹介してくれてるのがいい
Scalazが結構わかった気がする
残りも楽しみだ
0710デフォルトの名無しさん2011/12/16(金) 04:42:40.78
やっぱりアニヲタなのかw
0711デフォルトの名無しさん2011/12/18(日) 00:09:35.99
Scalaで4,10,32,50,94っていうリストがあって
入力として72と100という数値があったとして
72は、リストの値の範囲
100は、リストの値の範囲外
という処理はどう書くのが普通なんでしょうか?
0712デフォルトの名無しさん2011/12/18(日) 00:38:27.69
val list = List(4,10,32,50,94)
val inputs = List(72,100)
val (min,max) = (list.min,list.max)
for (input <- inputs) {
println(input + "は、リストの値の" + (if (min <= input && input <= max) "範囲" else "範囲外"))
}
0713デフォルトの名無しさん2011/12/18(日) 00:38:36.20
(x:Int) => { val l = List(4,10,32,50,94); l.min <= x && x <= l.max }
0714デフォルトの名無しさん2011/12/18(日) 06:50:08.08
def f(list: List[Int])(x: Int) = (list.min to list.max) contains x
0715デフォルトの名無しさん2011/12/18(日) 10:05:31.87
sbtってもう0.11まで行ってたのね
0716デフォルトの名無しさん2011/12/18(日) 10:14:06.46
>> 715
よくなった?
0717デフォルトの名無しさん2011/12/18(日) 12:48:53.40
>>712が手続き的なのに対して、>>713,714は、どや顔で、元の問題の72は範囲内、100は範囲外という話を忘れている件
0718デフォルトの名無しさん2011/12/18(日) 13:14:15.56
元のつまらない問題をいかに面白くするかが腕の見せ所だな。
>712-714はあんまり面白くないけど。
0719デフォルトの名無しさん2011/12/18(日) 13:16:39.97
http://eed3si9n.com/ja/essence-of-iterator-pattern
おいこの記事読んでもさっぱり理解できないんだけど
0720デフォルトの名無しさん2011/12/18(日) 17:31:07.68
sbt0.10.1→sbt0.11.1なら
scala-2.9.1に移行、2.7のサポート打ち切り
ディレクトリ構成が微妙に変わる
(プラグイン設定を /project/plugins/ に置いてたのを /project/ に置くように)
あと修正やら改良がいろいろ 詳しくは https://github.com/harrah/xsbt/wiki/Changes

まさかとは思うけど0.7系使ってるのならはよ切り替えた方が。
0.10系からはコンパイルも早くなってるし。
0721デフォルトの名無しさん2011/12/18(日) 18:03:55.48
>>719
Read original paper.
0722デフォルトの名無しさん2011/12/18(日) 20:25:07.12
>721の翻訳

「原論文を読め、このクズ。
ちなみに俺は英語が得意だ、hahaha!」
0723デフォルトの名無しさん2011/12/18(日) 20:29:09.95
突っ込むなら定冠詞抜けてるのを突っ込まないと
0724デフォルトの名無しさん2011/12/18(日) 22:09:01.10
⊛ 
→
>>=
⊙
⇓
⇑
∧
これ何?
0725デフォルトの名無しさん2011/12/18(日) 22:39:20.02
>>=はわかるだろ
0726デフォルトの名無しさん2011/12/19(月) 14:24:08.71
>>722
>>721のように書くなら、Read the original paper. だよ。
0727デフォルトの名無しさん2011/12/19(月) 21:32:17.36
単数形でいいの?
0728デフォルトの名無しさん2011/12/19(月) 21:41:35.37
"Applicative programming with effects"も合せて。
というか、その論文、5年以上かかってるのね。
0729デフォルトの名無しさん2011/12/19(月) 21:42:32.13
どうでも良い話広げようとするんじゃねえよ
07307292011/12/19(月) 21:43:47.80
誤爆
0731デフォルトの名無しさん2011/12/19(月) 23:43:20.50
同意
ApplicativeとかIterateeとかどうでもいい
ハスケラーに騙されてるだけ
0732デフォルトの名無しさん2011/12/20(火) 01:27:35.06
ApplicativeわからないとScala本当に理解しているとは言えないな
0733デフォルトの名無しさん2011/12/20(火) 01:52:30.31
>>732
すべってるよ、君
0734デフォルトの名無しさん2011/12/20(火) 16:03:27.76
小難しいことをさらに複雑にやろうとしているというのがなんとなく分かる。^^;
それがscalaなんだろうな。

haskellのapplicativeは便利なんだがな。
0735デフォルトの名無しさん2011/12/20(火) 16:46:37.67
これだよ、これ
だからハスケラーに騙されてるって言ってんだよ


悪いハスケラー「Applicativeなら綺麗に書ける!Iterateeは次世代IO!」
↓
馬鹿なスカラー「よーしそれならScalazとか作っちゃうぞ」
↓
さらに馬鹿なスカラー「なんか難しいけど流行ってるみたいだしScalaz勉強しよう」
↓
悪いハスケラー「ギャハハハほんとに作ってる!なにこの汚ねえコード!猿真似ww関数型の面汚しwww」
↓
一般ジャヴァー&シーシャーパー「Scalaって複雑そうだから触れないでおこう。あとなんかキモいし」
↓
馬鹿なスカラー「あれ?世界中から馬鹿にされてる?それによく考えたらこのライブラリ使い道ないな…」


完全に嵌められてる
0736デフォルトの名無しさん2011/12/20(火) 17:26:33.55
valとパターンマッチと便利なコレクションとimplicit parameterと型推論があるだけの
better javaとしてしか使えてない俺大勝利
0737デフォルトの名無しさん2011/12/20(火) 18:08:19.61
ApplicativeわからないとScala本当に理解しているとは言えないな
0738デフォルトの名無しさん2011/12/20(火) 19:37:05.92
Applicativeを無視する奴=OOPにおいてデザパタを無視するstaticおじさん
使わなくてもプログラムは作れるが使えばもっと抽象化できるということだろう
0739デフォルトの名無しさん2011/12/20(火) 22:36:41.31
デザインパターンってOOPの敗北の結晶だよね
0740デフォルトの名無しさん2011/12/20(火) 22:47:50.08
>>739
どういうことかもう少し詳しく聞かせて
0741デフォルトの名無しさん2011/12/20(火) 23:02:42.77
>>740
個人的な感想だけど
デザインパターンってOOPでは直接表現できないことを、どうにか解決してるという感想をもってる

例えば新しいプログラミング言語の機構を作ったときに、その評価としてデザインパターンが解いてる問題を
直接表現できるかみたいなのもある

visitor パターンはクラス階層に操作を追加できるようにするパターンだけど
裏をかえせば、OOPでは操作の追加が難しいという欠点があるということだし


あんまり真面目に取らなくていいですw
0742デフォルトの名無しさん2011/12/20(火) 23:38:20.54
そういうのは専用スレでやれよ。
0743デフォルトの名無しさん2011/12/20(火) 23:42:11.00
別に大した話題もないしここでもいい
0744デフォルトの名無しさん2011/12/21(水) 00:16:32.21
Scalaではどうなるのか?ってのはおもしろいかもね。
singletonは直接サポートしてる。
そういう文章はどこかにありそう。
0745デフォルトの名無しさん2011/12/21(水) 00:29:09.63
Applicativeって本当に理解しないとダメなの?
0746デフォルトの名無しさん2011/12/21(水) 01:05:08.65
たぶん、知らなくてもプログラムは組めるよ。scalaは知らないけどな。
haskellも知らなくても組める。ファンクタの働きくらいはしっておい
ていいと思うけどな。
0747デフォルトの名無しさん2011/12/21(水) 01:06:42.40
>>745
それすら理解せずにプログラマを自称するつもりですか?
恥ずかしい人ですね
0748デフォルトの名無しさん2011/12/21(水) 01:07:22.83
>>745
この世に〜しないと駄目なんてものはない。
プログラミングしなくてもいいし。
0749デフォルトの名無しさん2011/12/21(水) 01:26:10.42
http://learnyouahaskell.com/functors-applicative-functors-and-monoids
これの記述正しい?
0750デフォルトの名無しさん2011/12/21(水) 01:31:58.16
>>741
何か勘違いしてるみたいだけどデザインパターンってのは
「可能にするためのトリック」ではなくて
「よく出てくるから名前を付けてみたので共有しましょう」
なんだけどな
0751デフォルトの名無しさん2011/12/21(水) 01:35:38.23
>>741
OOP=中二病
0752デフォルトの名無しさん2011/12/21(水) 02:26:52.83
>>749
3行でまとめてくれ
0753デフォルトの名無しさん2011/12/21(水) 12:25:47.48
scala,java,c#,c,c++,ruby,python,php
これを難しい順に左から並べていただけませんか?
0754デフォルトの名無しさん2011/12/21(水) 12:29:54.30
(その他大勢の複雑極まる言語), C
■ このスレッドは過去ログ倉庫に格納されています