[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 09/04 23:04 / Filesize : 158 KB / Number-of Response : 669
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラミング言語 Scala



1 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:40:17 ]
The Scala Programming Language
ttp://www.scala-lang.org/

チュートリアル日本語訳
ttp://homepage.mac.com/takashi_miyamoto/scala/ScalaTutorial.pdf
どう書く?org Scala
ttp://ja.doukaku.org/lang/scala/

404 名前:デフォルトの名無しさん [2008/06/18(水) 04:35:06 ]
つ type

405 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 05:15:02 ]
つ classOf[String]

406 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 06:13:01 ]
>>405
ありがとうございます。探していたのは正にこれでした。

>>404
type a = b で型の別名が作れるんですね。
今回探していたものとは違いましたが、参考になりました。

407 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 12:55:22 ]
def getFunc(fun:Option[String => _ <: AnyRef]) = {
fun match {
case None => null
case Some(f) => (i:String) => f(i).notify()
}
}

上記のコードをコンパイルすると notify() の部分でエラーになりました。

fがStringを引数に取る関数であるというところまでは推論できているのに、
fの戻り値がAnyRefを継承した型である事を推論できないのはなぜなのでしょうか?

408 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 16:08:45 ]
Existential Type周りの推論の仕組みは正直よくわかっていないので
確定的な事は言えないのですが、推論できていないというより、どうもバグな気がします
たとえば、上記のコードを

def getFunc(fun:Option[String => _ <: AnyRef]) = {
fun match {
case None => null
case Some(f) => (i:String) =>
val a: AnyRef = f(i); a.notify()
}
}

とすると、コンパイルが通ることから、少なくともf(i)の返り値が
AnyRefのサブタイプであることは(コンパイラによって)認識されている
ように見えます。色々試してみたところ、以下のようなコードの場合

val fun: Option[String => _ <: AnyRef] = Some((s: String) => s)
val Some(f) = fun

コンパイラが
error: fatal error: bad type: ?(class scala.tools.nsc.symtab.Types$WildcardType$)
というメッセージを吐いて落ちるようです。この辺の事から推測すると、
Existential Typeとパターンマッチを組み合わせたときのバグのような気がしますが、
本当のところはわからないので、本家ScalaのMLで聞いてみるのが良い気がします

409 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 16:10:42 ]
回避策ですが、Function Typeは、返り値についてcovariant
annotationが付加されているので、わざわざExistential Typeを使わずに、単純に

def getFunc(fun:Option[String => AnyRef]) = {
fun match {
case None => null
case Some(f) => (i:String) => f(i).notify()
}
}

とすれば良いです。これで、ちゃんと
getFunc(Some((s: String) => s))
などのコードをコンパイルできます

410 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:16:10 ]
>>408-409
いろいろと試して頂き、ありがとうございました。
Existential Typeを使わないようにすることで、無事、動くようになりました。

英語は苦手なのですが、
そのうち、本家ScalaのMLでの質問にも挑戦してみようと思います。

411 名前:デフォルトの名無しさん [2008/07/09(水) 08:47:29 ]
ScalaのEclipsePluginは、Eclipseのどのバージョンで動きますか?

412 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:33:30 ]
ttp://www.scala-lang.org/tools/eclipse/index.html



413 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 19:30:46 ]
プログラミングしりとり
game14.2ch.net/test/read.cgi/575/1010948472/l50

414 名前:デフォルトの名無しさん [2008/08/21(木) 01:19:30 ]
Webサイトが変わった

415 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 09:21:03 ]
Renewal ですな
NetBeans 用プラグインも追加されてる > ヘルプも含めて IDE 本体のオール
日本語化は NetBeans の方がダンゼン速いので日本人にとっては良い知ら
せか
ただし 6.5 以上だけど (現在日本語はまだ GUI のみか日本語開発版のみ)

416 名前:デフォルトの名無しさん [2008/08/22(金) 02:27:02 ]
Scala本5月には出版っていってたのにまだプレプリントか。

417 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:10:17 ]
Scala本待てない人は、単なる個条的抜き書き程度のしろものですが
それまではこちらをどーぞ
ttp://www.h7.dion.ne.jp/%7Esamwyn/Scala/scalaindex.htm


418 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 15:00:49 ]
うはw こういうのうれしい。
英語のリファレンス読むのメンドくさくて、いまいちちゃんと理解できてなかったんで、
すげーうれしい。

419 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 21:31:43 ]
>>417
これ、ただの機械翻訳じゃないの?

420 名前:デフォルトの名無しさん [2008/08/22(金) 21:51:13 ]
>>416
www.artima.com/shop/programming_in_scala
そろそろ出るんじゃないの?

421 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 21:51:42 ]
機械翻訳はこういう文章を吐かないと思う
なんていうか、プログラマというよりは人文系の方が書いたような文章

422 名前:417 mailto:sage [2008/08/22(金) 23:32:47 ]
プログラマ向け、でなくJavaとJavaScriptならわかる、という人を想定したら
こんな文章に。
Scalaは、そんな人たちの(関数型言語)入門学習用に向く言語仕様である
ように思われたので。
(つーか私自身にとっても最新の関数型言語の入門学習目的で言語仕様
原文から外せない部分を抜き出す形でまとめました(直訳はおろか意訳で
すらねぃです、でも原文読む参考程度にはなるはず)。ちなみにコンカレント
云々はまだわからない程度のレベルな私)



423 名前:417 mailto:sage [2008/08/22(金) 23:37:07 ]
あーあといちばん最初に訳した言語仕様要約は直すべき部分が最多ですが
今はいろいろあって直すヒマがないのであしからず(私自身によるコメント部分
に集中してるので、そこの変なのは無視してくだされ。要約でない解説諸ペー
ジの方のが正しいです)。

424 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 23:42:12 ]
>If you purchase just the PDF eBook for $27.50, you will be entitled to receive periodic updates as the authors
>complete the book, as well as the final PDF when the book is finished, for no additional charge. If you purchase PDF
>+ Paper Book combo for $59.99, you will be entitled to the PDF eBook updates, and we'll ship you the paper book
>when it is published, on or around August 30, 2008. (Once the book has been printed, you'll be able to purchase just
>the paper book here for $49.99.)

すいません。これ訳してください。

425 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 23:55:28 ]
こんな感じか?

$27.50でPDF買ったら、本が完成するまで
追加料金なしでPDFのアップデート受けられるよ。
$59.99でPDFと紙の本買ったら、PDFのアップデートできるし、
10月30日くらいに出版されたら紙の本も送るよ。
出版後は$49.99で紙の本買えるよ。


426 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 23:57:21 ]
August 30
8月30日、ですね

427 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 00:05:59 ]
>>425-426
ありがとうございます!
もうすぐ発売日じゃないですか!

428 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 15:41:22 ]
>>417
ひさびさに電波ぽい文章を見た

429 名前:デフォルトの名無しさん [2008/08/23(土) 16:48:38 ]
>>428
だなw

頑張ってくれたのに悪いが、行間びっちりな上にろくに段落を区切ってないから、
文章ではなくなんかの模様に見えてしまう。そんなだから最初の一文すら読む気が起きない。

430 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 17:34:52 ]
>417
むむむ……典型的な『頭の良い人が書いた難しい文章』だな。
・文が長すぎ/意味詰め込みすぎ
・読者に必要な前提知識が多過ぎ
・話が発散しすぎ
ということでおいらもムリ。

自分も素人なんであんまり偉そうなことは言えないけど、
・一文の意味/意図が一つになるように文を解体する。
 - ()の解説は多用しない。注釈で飛ばした方が良い。
 - 直前の文までに出てきた言葉だけで文章を組む。新規の言葉は解説する。
・段落の基本構造(序破急)を意識して文章を構築する
・文章の基本構造(起承転結)を意識して段落や章を構成する
あたりだけでも注意すればずいぶん違うんじゃない?


431 名前:417 mailto:sage [2008/08/23(土) 20:41:20 ]
いちばん最初のページの水平線から下は「言語哲学的意味論」なのでいわゆる
リファレンスとしては読む必要はまったくないです (つまり、この水平線は、ここから
下は「Scalaという言語に対する(個人的)注解」である、という意味です)
水平線から上の部分にザッと目を通したあとはそのまま「1階受付」へとお進みく
ださい (そこからはいくらかでもマシになってるかと)

432 名前:417 mailto:sage [2008/08/23(土) 20:47:00 ]
あと行間は、私は逆に空いてると読みづらい方なので、直すかどうかは微妙です
Firefoxなら「スタイルシートを利用しない」すればほんの少しだけ行間が空いて字
ももう少しだけ大きくなるよーですが ...



433 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 21:11:55 ]
行間以前の問題だろ>読みづらさ

434 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 21:27:38 ]
>>417
論文ではなく、仕様書を書くようになればみんなの気持ちが分かるようになるよ。

435 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 21:47:37 ]
>>430
頭がよいのとおかしいのと狭間くらいだと思う

436 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 21:59:18 ]
これで難しいって、どれだけ土方なんだよ。

スタイルシートは変更したけど。

437 名前:417 mailto:sage [2008/08/23(土) 21:59:54 ]
読みづらさについては申し訳ないですが、いずれこのScalaページは6月頃に
書いたもので (必要な人はググって自力で見つけるだろうと思いこちらでとく
には宣伝しませんでした; まだいろいろと不完全であるためもありますが)、今
はほかにやるべきことができてしまって当分私自身による修正は無理っす

ぬか喜びさせてしまって申し訳なひ、おのおの方

438 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 00:56:07 ]
スタイルは俺も無効にしたw
これぐらい特殊な文体でもいいんじゃないかな。もちろんわかりやすいほうがいいが、
クセがあって読みにくいぐらいの文章でも、Scalaの雰囲気としてはあってるような気がする。

439 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 06:34:46 ]
>>430
序破急! うーーーーん。

440 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 10:14:48 ]
序破急 > 導入・展開・参考
起承転結 > 理由・これまでの過程・話者の新しい意見・新旧の比較

とゆーことではないかな?
ちなみに序破急は能の作劇論、起承転結は漢詩の構成論が由来

441 名前:not 439 mailto:sage [2008/08/24(日) 10:33:48 ]
技術文書の段落に序破急はおかしいだろw
>>440の頓珍漢さに苦笑

442 名前:430 mailto:sage [2008/08/24(日) 12:35:13 ]
>441
じゃあ導入->展開->結び で良いや。
さすがに段落ごとに全部この構成にするのはムリがあるけど、意識しないで
破綻するよりはマシですな。

>440
起承転結は序章の話になりますな。
各階の説明は概要->詳細の二段構成でも十分かな。

活用例は>440みたいな感じだけど、起の部分は『文章の全体像・説明範囲を規定する』という内容になるかと。
読者にまず「この文章は何について言及するのか?」というスコープを提示するわけですな。

ちなみに、序破急は能じゃなくて雅楽から来た言葉らしいよ(Wikipedia)




443 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:25:36 ]
>>434
それは論文に対して失礼だw
>>417には悪いが、少なくとも、コンピュータサイエンス系の論文で>>417くらい読みづらい
文章は見た覚えがないよ

444 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:34:09 ]
417のサイトは他のページの方が電波ゆんゆんでいい感じだ

445 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:15:12 ]
Programming in Scalaって本当に8月30日くらいに発売されるの?
アマゾンとかに全然来てないんだけど・・・

446 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:47:49 ]
417は括弧部分をごっそり削ると、ちょっとだけ読みやすくなるぞ。
ちょっとだけ、だけどな。

447 名前:デフォルトの名無しさん [2008/08/24(日) 22:04:48 ]
Amazonとかの普通の流通に乗るのかなあって気も。

448 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 00:06:02 ]
え!?そんな立ち位置なの・・・
Scalaのサイトでしか発売されないのかなあ・・・

449 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 19:44:46 ]
>>417とか人によませるブログとか一度書いてみた方がいいと思うよ

450 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:29:39 ]
ところでProgramming in Scalaってどんな内容なの?
PDF読んだ人いますか?

451 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:45:57 ]
pdf読める携帯買ったんで突っ込んでみたが、読みにくくて読んでないな

452 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 08:18:39 ]
>>450
> どんな内容なの?

読め




453 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:51:20 ]
Programming in Scalaって結局出版されたんですか?

454 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 14:36:35 ]
日曜に本屋で見た。

455 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:47:42 ]
マジで?
日本の本屋?

456 名前: mailto:sage [2008/09/02(火) 22:14:25 ]
うそだろ。ホームページ見たら
when it is published, on or around September 30, 2008.
ってなってた。また延期です。

457 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 10:06:41 ]
この言語、groovy, jython, jrubyなどに対する利点は?

458 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:10:24 ]
>>457
一つは速度

459 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:02:40 ]
おお、それは凄い!
残りの二つ目以下26項目も挙げてくだされ。

460 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:04:16 ]
jython > 本家にかなり遅れている
jruby > 元来 Rails と Java の共用が目的で、それ以外にあえて使う理由がない
groovy > Java 版 Rails のための言語だが失敗。Rails 利用者は Java を要せず、
Java 利用者は Rails を要せず
scala > 関数型パラダイムを Java に持ち込むための言語で、上 3 つとの類似は
あくまでその結果 (Python と Ruby が関数型パラダイムの影響を非常に
強く受けているため)
つーわけで利点云々以前に、もともとの存在理由がまったく異なります

461 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:40:59 ]

その逃げはないっしょ

462 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:52:26 ]
都合の悪い展開になったから逃げ呼ばわりするという逃げは
どうかと思います。



463 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 13:04:26 ]
は?俺に都合のいい展開って何?各言語信者の醜い貶しあい?

464 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:11:14 ]
結局Scalaのアドバンテージは特に無い、という展開。

465 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:45:10 ]
Scalaの利点ねえ。
あえて挙げるならきちんとした型システムがあるとことかかな。

466 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:21:49 ]
>>464
Javaで書くより100倍楽だけど、性能はJavaと同等。
でもEclipseのScalaプラグインはもうちょっとがんばって欲しい。
今だとまだEmacsのscala-modeの方が使い易い。

467 名前:デフォルトの名無しさん [2008/09/08(月) 11:36:23 ]
メッセージ駆動並行なコード書くのに
JMSとJMXでMDBと、ScalaのActorどっちが楽?

俺は断然Actor派

468 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:20:42 ]
Erlang派

469 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 08:13:33 ]
プログラミングしりとり
schiphol.2ch.net/test/read.cgi/575/1010948472/l50

470 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 16:16:58 ]
Computer Language Benchmarks Game
ttp://shootout.alioth.debian.org/u64q/index.php

Javaは何だかんだで早いよなぁ。
やっぱり俺の本命はErlangじゃなくてScalaだ。
次世代ゲーム機もScalaWithJavaAPIでいいと思う。

471 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 17:23:11 ]
>>988
古い規格だと、ISO 9899:1990 セクション 3.4 で "byte" が定義されている。
同 セクション6.3.3.4 に The sizeof operator yields the size (in bytes) of its operand.
とある。
sizeof(char)は1で単位はバイト。

終了。
 

472 名前:デフォルトの名無しさん [2008/09/13(土) 17:25:46 ]
>>988
古い規格だと、ISO 9899:1990 セクション 3.4 で "byte" が定義されている。
同 セクション6.3.3.4 に The sizeof operator yields the size (in bytes) of its operand.
とある。
sizeof(char)は1で単位はバイト。

終了。




473 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 17:26:50 ]
誤爆しかも連投ごめんなさい。

474 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:43:26 ]
C99なんてもう誰も知らんぞ・・・

475 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:22:20 ]
今度こそProgramming in Scalaって出版されましたか?

476 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:00:30 ]
いいえ

477 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 14:34:55 ]
10月30日以降にまた延期でっす!!

478 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:18:20 ]
またかよ!
完成してから発売日発表しろよ!!

479 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:24:51 ]
>>478
商売の基本は、発売前にマーケティング開始することだからなあ・・・
売れないのがわかったら出ないもんだし

ぁゃしぃebookだってそうだろ?
最初にまず、市場調査→セールス文を書く→マーケティングをしかける→商品作る→売れそうなら発売
が基本ってしってた?

480 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:25:23 ]
> 商売の基本は、発売前にマーケティング開始することだからなあ・・
商売の基本は、商品完成前、発売前にマーケティング開始することだからなあ・・

481 名前:デフォルトの名無しさん [2008/10/06(月) 00:30:08 ]
執筆はどの時点で終わってるの?

482 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 01:14:30 ]
ScalaByExampleのサンプルで動かなかったので質問
9.3章の最後
val intSort = msort((x: Int, y: Int) => x < y)
val reverseSort = msort((x: Int, y: Int) => x > y)
最後に'_'がない

10.3章
for { i <range(1, n)
   j <range(1, i)
   if isPrime(i+j)
} yield {i, j}
List.range()になってない
最後が(i,j)じゃない
これってサンプルのミスってことでいいの?



483 名前:デフォルトの名無しさん [2008/10/11(土) 19:31:52 ]
昔のバージョンではメソッドから関数への変換は _ つけてなかったし、タプルリテラルも中括弧だった(不評のためすぐに小括弧になった)。rangeは覚えてないけどそうだったんだろうね。

484 名前:デフォルトの名無しさん [2008/10/11(土) 19:42:07 ]
rangeは単にミスか省略か前提があるのかも。

485 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:59:16 ]
ただのミスでしょう。ScalaLanguageSpecificationやScalaByExampleには新版ではエラーに
なる旧版のままの例のほかにもひと目でわかるタイプミスもときどきあります

486 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 00:07:59 ]
解答サンクス
仕様変更にリファレンスが追いついてない状態なのね
本の出版が遅れるのも納得だわ

487 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 12:48:50 ]
見つけたScala Language SpecificationやScala By Exampleのミスは、
MLで報告してあげると良いかも。英語で質問するのは敷居高いと思うかも
しれんが、適当な英語でもそれなりに意味を汲み取ってくれるので、大丈夫

488 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:26:54 ]
2.7.2 RC3でた

489 名前:デフォルトの名無しさん [2008/10/18(土) 12:49:41 ]
pragprog.com/titles/vsscala/programming-scala

490 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:20:09 ]
>>489
> March 30, 2009.
orz

491 名前:デフォルトの名無しさん [2008/10/18(土) 13:53:15 ]
あー489はOdersky本とは別ですよ。タイトル同じだけど。

これも別ね。
blog.aspectprogramming.com/2008/10/6/writing-a-book-on-scala

492 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 00:22:05 ]
タイトル、微妙に違うくね?



493 名前:デフォルトの名無しさん [2008/10/22(水) 07:54:12 ]
Programming in Scala is at the Printer
www.nabble.com/-scala--Programming-in-Scala-is-at-the-Printer-td20098100.html#a20098100
> most likely we'll be shipping printed copies to all those who bought them the second and third week of November.

まだ先かー。

494 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:03:02 ]
今日は、Scala勉強会@東北の日。東北と言っても、開催するのはネット上。夜の8時から。

495 名前:デフォルトの名無しさん [2008/10/24(金) 20:23:54 ]
エロい人ならScalaでグラフ構造ってどうつくるんだろう?
自分でつくると、JAVAで作ったのと変わらない物ができてしまう・・・
caseクラスとか駆使して、もっと、かっちょよく作れないもんかな。

496 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:16:36 ]
そんなメタな構造なら、どんな言語で作っても基本は同じになるんじゃない?
それにメタであるだけに、応用によって実装のしかたは変わるし。
「アルゴリズムがJavaならオブジェクト指向に!」みたいな違和感がある。

497 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 07:07:55 ]
Scalaって下がJavaだから仕方ないんだろうけど、
他の関数型言語だと構文で解決するようなものを
動的な仕組で無理矢理そう見せてる部分が筋がよくなくてどうにも気持ち悪い。

498 名前:デフォルトの名無しさん [2008/10/25(土) 12:34:48 ]
tatoeba?

499 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:26:47 ]
>>497
んなこたあ無いと思うが、具体例は?

500 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:42:48 ]
>>497
え?動的な仕組で無理やり解決?それってむしろ他の関数型言語でしょ。
Scalaは静的な仕組みで無理やり解決だよ。

501 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:49:35 ]
リストの構築子も :: なんてそれっぽいものを用意してはあっても
所詮はメソッドのお化粧なのでパタンに書けないとか。

パタンマッチするのにケースクラスなんてものを導入せざるを得なかったのが
そもそもそうだと思うし。

502 名前:デフォルトの名無しさん [2008/10/25(土) 17:29:45 ]
ポイントがよくわからんので具体的なコードで他言語と比較してほしいなあ。



503 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:01:52 ]
>>501
なんとなくわかった。
ちょっと違うが、JavaのGenericsのような無理や不自由さがあるということか。

504 名前:デフォルトの名無しさん [2008/10/25(土) 18:04:49 ]
余計わかんねー。Javaのジェネリクスって動的な仕組みなの?

505 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:10:26 ]
>>501
えーと、::はListクラスのメソッドであり、かつcase classだからパタンに書けるんだが…
それはともかく、ケースクラスを導入せざるを得なかったってのは違うと思うな
パターンマッチングという機能をプリミティブで拡張性の無いものでなく、ユーザが
後付けでパタンを定義できて拡張性のあるものにするためにどうすればいいのか
という問題に対する解の一つがケースクラスなりExtractorであるってことだと思う
MLとかのパターンマッチに関する有名な問題の一つとして、抽象データ型に
対してパターンマッチできん、というのがあるけど、Scalaではこの点はそもそも
問題にすらならない

506 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 22:00:06 ]
>>504
仕組みや目的はまったく違うけど、VMの仕様が言語に影響して無理があって不自由なところが一緒かと

507 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 11:17:41 ]
JVM 上の Scheme とか普通にあるし、VM の仕様より、既存の Java ライブラリとの親和性を
重視してるかどうか、の違いでわ?

508 名前:デフォルトの名無しさん [2008/10/26(日) 19:05:01 ]
なんつーか、JVMの仕様からくる言語使用上の制約は実際あって思いつくけれども、
最初に動的とか非関数型的とかって書いたのはテキトーでしょ?
いずれにせよもうちょっと具体的に語ってくれればその通りだねとかいやそれは違うとかいえるんだけどさ。

509 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:59:56 ]
>> 507
動的な型の言語と比較するのはあまり意味がないと思われる。

510 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:37:34 ]
>>506
Javaからも呼び出せるように class としてバイナリを作成するがために、言語仕様に制約が出ているんじゃないかってことと考えて良い?

511 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:19:20 ]
>>501
そりゃ構文の話で、動的とか静的とか関係ないだろ。

512 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:27:01 ]
>>505
case classを使ったパターンマッチを、
クラス上のデザインパターンにするって主旨の設計だからねえ。
データ構造に依る分岐構造を、
データ構造上のcase classにまとめて整理しようって考え。
Scalaは型大好きだから。

パターンマッチ作法が強制されるけど、
整理の仕方としては面白いわね。



513 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 11:52:41 ]
オカマっぽい

514 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:20:27 ]
>>513
すまん。女です。

515 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:13:26 ]
ワロタ

516 名前:デフォルトの名無しさん [2008/10/30(木) 02:43:53 ]
2.7.2 RC4でた

517 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 01:52:02 ]
RC5でた

518 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:54:35 ]
RC6でた

519 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:36:53 ]
RC7でた

520 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:10:55 ]
いや、マジで 今 RC6

521 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:43:24 ]
RC8来たよ

522 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:14:09 ]
マジかと思って見てみたらRC9が出てるし



523 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:35:29 ]
Programming in ScalaってAmazonとかで買えるようになるんですかね?

524 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:27:53 ]
そうして RC365 まで毎日でるわけですね

525 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:02:39 ]
>>524
そこまでRubyの真似をしなくていいよwww

526 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 01:01:21 ]
>>525
Vimのまねだったらやだな。

527 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 10:30:07 ]
D言語みたいに、0.99から0.100になるよりは期待感なくてよいじゃないの

528 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:49:46 ]
scala・・・この言語イマイチだねえ

529 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:50:38 ]
とにかく中途半端な印象しかない

530 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:26:21 ]
とにかくイマイチ絶対に例を挙げない

531 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:36:06 ]
あくまで実用本位で言語オタク受けは眼中にないからな

532 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:46:01 ]
えっ!?



533 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:06:39 ]
rubyの気持ち悪さ異常

534 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:11:20 ]
ruby や groovy は、いいときはミラクルなまでにサクサク進むけど
バグるとプロでもさじを投げるぐらいデバッグが超絶困難なようだね

535 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:42:12 ]
コミュニティの性格に似てるかもな。
好きなスタイルで気分良くモノを進めている時は非常に良い顔を見せるが、
好まないスタイルとの出会いや不機嫌に耐性が無く、そういう時は非常に排他的で非生産的になる。

536 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:54:23 ]
>>534
普段、静的型付け言語とRubyつかっているけど、たまに頭のモード切替が不十分で
静的みたいに書いちゃって、なかなか気づかないバグ残したことがあるよ。

この前ハマったのは、クラスのプロパティをattr_accessorだかで定義して、
自クラス内でプロパティ名そのままでアクセスしようとして、上手くいってなくて、
1日悩んだ挙句、self.プロパティ名、でアクセスしないといけないことに気づいたことかなw
アホか俺は、と思ったけどw

537 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:07:25 ]
スレ違い

538 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 10:22:16 ]
Actor の link って何に使うのか良くわからん・・・・

539 名前:デフォルトの名無しさん [2008/11/08(土) 12:25:48 ]
別のアクターが終了したのを検知する(あるいは一緒に死ぬ)ため。

540 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 15:06:14 ]
ありがとうー。
Exit メッセージが来るってことですね。

てっきり、複数のアクタをグループ化して、メッセージのマルチキャストみたいなことができるのかと勘違いした。

541 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 15:08:13 ]
あぁ、そうか。プロセスと同じように考えればいいのか。
親プロセスが死んだら、子プロセスも死なすって考えればいいのか。

542 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 15:51:32 ]
メッセージのマルチキャストは、仲介役のアクタを用意して、自前でやるってことか・・・
www.nabble.com/Scala-actors-and-message-broadcasting-td19442504.html#a19442504



543 名前:デフォルトの名無しさん [2008/11/10(月) 12:20:05 ]
Scala 2.7.2 final キタ!

544 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 21:13:27 ]
次は final2 がリリースされるんですね、わかります。

545 名前:デフォルトの名無しさん [2008/11/15(土) 08:39:33 ]
Programming in Scalaって出版されましたか?

546 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 21:33:35 ]
11月25日前後を刮目して待て!

547 名前:デフォルトの名無しさん [2008/11/15(土) 22:09:54 ]
刮目して待ちます!

548 名前:デフォルトの名無しさん [2008/11/19(水) 00:11:34 ]
Programming in Scala 出版age

549 名前:デフォルトの名無しさん [2008/11/19(水) 12:03:23 ]
紙の本はまだだな

550 名前:デフォルトの名無しさん [2008/11/20(木) 22:06:48 ]
紙のほうは日本で買えるんですか?

551 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 08:26:36 ]
アマゾンで買えるようになんじゃね

552 名前:デフォルトの名無しさん [2008/11/25(火) 11:07:31 ]
下は公式サイト(確か・・)で取ったサンプルコードなんだが、
作成アクター数(nActors)が500くらいからエラー吐きまくり・・

2.7.1の頃は、nActors = 1000でもちゃんと動いたんだが、
なんか知ってるエロい人いない?

import scala.actors._
import scala.actors.Actor._

object Message {
def main(args: Array[String]) {
val n = try {
Integer.parseInt(args(1))
} catch {
case _ =>
println("Usage: examples.actors.Message <n-actors> <n-times>")
Predef.exit }
val nActors = 1000
val finalSum = n * nActors
Scheduler.impl = new SingleThreadedScheduler




553 名前:デフォルトの名無しさん [2008/11/25(火) 11:08:50 ]
// 続き1
def beh(next: Actor, sum: Int) {
react {
case value: Int =>
val j = value + 1; val nsum = sum + j
if (next == null && nsum >= finalSum) {
//println(sender)
println(nsum)
System.exit(0)
} else {
if (next != null) next ! j
//println(sender)
beh(next, nsum) }}}

554 名前:デフォルトの名無しさん [2008/11/25(火) 11:13:52 ]
// 続き2
def actorChain(i: Int, a: Actor): Actor =
if (i > 0) actorChain(i-1, actor(beh(a, 0))) else a

val firstActor = actorChain(nActors, null)
var i = n
while (i > 0) {
firstActor ! 0
//if (i % 100 == 0) println(i)
i -= 1 }}}


555 名前:デフォルトの名無しさん [2008/11/25(火) 11:20:20 ]
nActors >= 473 で
以下を延々吐くみたい

at Message$$anonfun$beh$1$1.apply(message.scala:34)
at Message$$anonfun$beh$1$1.apply(message.scala:25)
at scala.actors.Reaction.run(Reaction.scala:78)
at scala.actors.SingleThreadedScheduler.execute(Scheduler.scala:174)
at scala.actors.Scheduler$.execute(Scheduler.scala:80)
at scala.actors.Actor$class.send(Actor.scala:411)
at scala.actors.Actor$$anon$1.send(Actor.scala:93)
at scala.actors.Actor$class.$bang(Actor.scala:583)
at scala.actors.Actor$$anon$1.$bang(Actor.scala:93)

556 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 17:50:27 ]
StackOverflow が出てるんだけど、-Xmsをいくら増やしても改善しない。これはバグかもわからんね・・・

557 名前:デフォルトの名無しさん [2008/11/25(火) 18:51:51 ]
Programing in Scala v6(PDFと紙で買える奴な)
で、p73に

val greetStrings = new Array[String](3)

って言うコードがあるんだけどさ
2.7.2 final でインタプリタモード立ち上げて打ったら

scala> val greetStrings = new Array[String](3)
java.lang.NullPointerException
at scala.runtime.BoxedArray._deepToString$1(BoxedArray.scala:134)
at scala.runtime.BoxedArray.deepMkString(BoxedArray.scala:139)
at scala.runtime.BoxedArray.deepToString(BoxedArray.scala:127)
at scala.runtime.ScalaRunTime$.stringOf(ScalaRunTime.scala:163)
at RequestResult$.<init>(<console>:4)
at RequestResult$.<clinit>(<console>)
at RequestResult$...

だってさ \(^o^)/

2.7.1は全く問題なし \(^o^)/

とってもBuggyです本当ny

558 名前:デフォルトの名無しさん [2008/11/25(火) 20:01:50 ]
何気にインタプリタでArrayを内容表示する方式が変わったんだな。
昔は [L 方式で、新しいのは中身も表示してあげようとして要素のtoString呼んじゃってるようだ。
ArrayのtoString自体には問題ないようなのでインタプリタ固有の表示ルーチン持ってるんかな。

559 名前:デフォルトの名無しさん [2008/11/25(火) 21:14:09 ]
昔は単純にオブジェクトのtoStringを呼んでたんだけど、
新し目の版ではScalaRuntime#stringOfってメソッドを追加してそっちを使っているようだ。
stringOfはval a = null みたいなのについて例外を出さなくしてくれるのだが、
ArrayについてはtoStringじゃなくdeepToStringを呼ぶようにしていて、
このdeepToStringは要素のnullには(たぶん昔から)対応していないんだな。

560 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 21:33:26 ]
val greetStrings = Array.make[String](3, "")
でとりあえず回避可

561 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:57:29 ]
>>556
-Xss でかくするとか

562 名前:556 [2008/11/25(火) 23:29:14 ]
>561
スマソ、556は-Xssのtypoでした。
Xmx,Xssとも増やしてもだめだった。><

ちょっとソース眺めてみたが、Actorまわりは結構手が入っている模様。
(スケジューラはインターフェースも変わっている)
もしかしたら、SingleThreadedSchedulerはそれらに対応できていないのかもしれない。

lampsvn.epfl.ch/trac/scala/changeset?old_path=%2Fscala%2Ftrunk%2Fsrc%2Factors%2Fscala%2Factors%2FScheduler.scala&old=13978&new_path=%2Fscala%2Ftrunk%2Fsrc%2Factors%2Fscala%2Factors%2FScheduler.scala&new=16207

ちなみに、上記のソースも
Scheduler.impl = new SingleThreadedScheduler
をしなければ、動くはず。



563 名前:561 mailto:sage [2008/11/26(水) 12:57:09 ]
java -Xss64M -cp scala-library.jarのパス:. Message 1000 1000
こちらではこれで動きますた

564 名前:561 mailto:sage [2008/11/26(水) 13:16:35 ]
ちなみに
Scheduler.impl = new SingleThreadedScheduler
をしてる方
あと、デフォらしい -Xss512K では StackOverFlow しましたが
-Xss1024K なら大丈夫でした

565 名前:556 mailto:sage [2008/11/26(水) 13:43:32 ]
>563
むむっ・・・本当ですね・・・
当方、環境変数JAVA_OPTSで設定していたつもりが、
なにか間違っていて設定が効いてなかったみたいです。orz

結局、単純に2.7.2でスタックの消費量が増えてたってことっすね・・・

566 名前:デフォルトの名無しさん [2008/11/27(木) 23:58:25 ]
>>551
本当にアマゾンで買えるのかなあ?
いまだに上がってない・・・
3月発売予定の達人のほうは上がっているのに・・・

567 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 00:55:36 ]
まだみたいだね
www.amazon.com/dp/0981531601/

568 名前:デフォルトの名無しさん [2008/12/01(月) 10:45:13 ]
買えるようになったな

569 名前:デフォルトの名無しさん [2008/12/08(月) 07:09:25 ]
今日、やっと pattern matching の凄さを、下にある OCaml の 加減乗除算式を変形する
コード例で理解できました。

 www.ocaml-tutorial.org/ja/data_types_and_matching

pattern matching だけならば python でも近いことが実装できそうな気がしますが、「
Warning: this pattern-matching is not exhaustive.」と警告を出すことは不可能とし
か思えません。

でも OCaml ではライブラリの蓄積に限りがあります。本格的に OCaml をやるのは躊躇わ
れます。Scala の pattern matching でも OCaml と同等の「this pattern-matching
is not exhaustive.」警告を出してくれるのならば OCaml ではなく Scala に挑戦してみ
たいと思います。

Scala の pattern matching でも 「this pattern-matching is not exhaustive.」警告
を出してくれるのでしょうか? 少し google しても、下のようなことも書かれています。

 lampsvn.epfl.ch/trac/scala/ticket/335

Scala の 「pattern-matching is not exhaustive.」警告について教えてくださいませ。


570 名前:デフォルトの名無しさん [2008/12/08(月) 09:07:06 ]
>>21を読めばいい

571 名前:デフォルトの名無しさん [2008/12/08(月) 13:01:16 ]
>>570 >>21を読めばいい

御指摘、ありがとうございます。

若干のバギーな面があるにしても OCaml に近い pattern matching 処理を scala でも書
けそうですね。

Scala に喰らい尽きたくて涎が出ています。ただ、scala に移ってくる programmer の割
合が心配です。Java programmer の殆どは scala には移ってこないだろうと思っていま
す。Python から scala に来る programmer の方が多そうに思えます。


572 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 22:57:13 ]
>>571
誰がどこから移ってくるとかどうでもいい



573 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:15:41 ]
どうでもいいと思ってるなら書かなきゃいいのに。
いちいち自分の興味ない話題に「どうでもいい」なんてレスしてたらキリないぞ。

574 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:44:20 ]
「どうでもいい」厨にレスしなくていいよ。
どこにでもいるから。
専用ブラウザのあぼーんに設定しておけばそれで済む話

575 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 17:12:50 ]
自意識が分相応なところに落ち着く前の年齢なんでしょ。

「この俺が、他ならぬこの俺が、どうでもいいと思った!
この話題自体はどうでもいいことだが、この俺がどうでもいいと思ったことは
なんとしても書き込まれねばならない重大ニュースだ!」

576 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 17:15:20 ]
なんて中身の無いスレだ

577 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:27:15 ]
Scalaでスカラ

578 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 00:15:14 ]
珍しく書き込みが続いたと思ったらこれかよ

579 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 01:05:02 ]
3っつもレスがつくなんて>>572も書き込んだかいがあったな

580 名前:デフォルトの名無しさん [2008/12/11(木) 08:47:42 ]
>>569 です。scala へ飛び込むための背中押しをお願いします。また Java は殆ど使って
いないので誤解があったら指摘してやってください。

Java の generics は C++ generics/python duck typing とは別物だと思います。実質
的には、collection に対する cast を省略するために導入された構文だと極論しても許
されると思います。

本来の generics programming は、method 構造の共用を利用したプログラムの共用だと
思います。例えば __add__ method と __len__ method が共用されている全てのインスタ
ンスについて、下のような平均ルーチンを共用できることが generics programming だと
思います

T mean(listOfT):
  T tAt = 0
  for elm in listOfT: # sum up loop
    tAt = elm.__add__(tAt)

  return tAt/len(listOfT)

この意味で C++ template と python duck typing は似ています。必要があれば boost
library をpython に移植できます。一方で boost library を Java に移植するなんて無
理だと思います。

------------------------------
ここで質問です。 scala の generics は Java と同じ/別物どちらでしょうか。
boost library などの C++ template program を scala に移植することは可能でしょう
か。

これが可能ならば scala に飛び込みます。よろしく教えてやってくださいませ。


581 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:49:16 ]
Scalaやらないでいいよ。

582 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 11:30:04 ]
>>580
書き方を見るに、C++ templateすらろくに理解してなさそうだけど
(boostをpythonに移植できるなんて簡単に言う辺りがそう。boostはC++
templateのメタプログラミング機能を利用した部分も多くあって、duck typing
があれば大丈夫程度の代物じゃないよ)
あえて言うと、ScalaのgenericsはJavaのgenericsのシステムがベースに
なっていて、かなり似てはいる。もちろん、Javaのgenericsには無い特徴も
多くあるけど。



583 名前:デフォルトの名無しさん [2008/12/11(木) 13:33:44 ]
>>569 です。ご意見ありがとうございます。

>書き方を見るに、C++ templateすらろくに理解してなさそうだけど
>(boostをpythonに移植できるなんて簡単に言う辺りがそう。boostはC++
>templateのメタプログラミング機能を利用した部分も多くあって、duck typing
>があれば大丈夫程度の代物じゃないよ)

同意します。boost は必要に迫られた範囲でしか追っていません。私の環境では、
boost に積極的に関わったら、周囲から浮き上がってしまうだけだからです。

「C++ のSTLを使ったプログラムを scala に移植できますでしょうか?」と話を狭めます。
STL を使っただけのプログラムなら、大部分は duck typing で対応させられます。でも
Java の generics では無理でしょう。


>もちろん、Javaのgenericsには無い特徴も多くあるけど

580 さんは、私よりずっと知っていそうです。できたら「Javaのgenericsには無い特徴」
で主要だと思われる数点をあげてもらえますでしょうか。


584 名前:582 mailto:sage [2008/12/11(木) 19:16:55 ]
>>583
>>582では、筆が滑って偉そうな書き方になってしまった。申し訳無い。

>「C++ のSTLを使ったプログラムを scala に移植できますでしょうか?」と話を狭めます。
>STL を使っただけのプログラムなら、大部分は duck typing で対応させられます。でも
>Java の generics では無理でしょう。

現在のJavaの標準ライブラリだと苦しいと思いますが、JavaでもSTL風のライブラリを
組めば近いことはできると思います(実際、STLを意識した設計のJavaコレクション
ライブラリがありました)。もちろん、STLの使われ方によっては難しい場合もあると
思いますが、一般的なケースでは十分可能ではないかと思います。

>580 さんは、私よりずっと知っていそうです。できたら「Javaのgenericsには無い特徴」
>で主要だと思われる数点をあげてもらえますでしょうか。

・genericsの共変/反変
詳しい説明は省きますが、Genericな型T[A]とT[B]があったときに、
A <: B(AがBのサブタイプである、と読む)ならばT[A] <: T[B]であるとき、
genericな型Tは共変である、といいます。その逆に、A <: BならばT[A] >: T[B]
であるとき、Tは反変である、といいます。具体例を出すと、ScalaのList型は
共変になっていて、List[Any]型の変数にList[String]やList[Int]を入れたり
することができます。このような機能はJava(やC++)にはありません(C++なら
templateを駆使した技巧によってあるいはできるかもしれないけど、素の
機能としては無いです)。

585 名前:582 mailto:sage [2008/12/11(木) 19:17:48 ]
レスが長くなったので分割しました。

・structural type
いわば静的に型チェック可能なダックタイピングのようなもので、
例えば、
type A = { def hello: Unit }
とすると、A型は、Unitを返すhelloメソッドを持つ全ての型に適合するようになります。
この機能自体はgenericsに直接関係するわけじゃないですが、genericな型の
制約として、structural typeを使うことができるため、型パラメータTがhelloメソッド
を持っているべき、などの制約を表現することができます(いくつか実装上の
制約がありますが)。

・型パラメータのlower bound指定
Javaのgenericsでは、型パラメータTがある型のサブタイプであるべき、という制約は
表現できますが、Tがある型のスーパータイプであるべき、という制約は表現できません。
これは、上で書いた共変/反変の機能とセットで使うことで威力を発揮します。

他にもありますが、とりあえずこの辺で。

586 名前:デフォルトの名無しさん [2008/12/11(木) 22:18:27 ]
えー、Javaでも反変あるでしょ?
Scala特有なのはvariance annotationで自動的に共変なり反変なりになるところだと思う。

587 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 23:17:31 ]
$ scala helloWorld.scala
/work/helloWorld.scala:1 error: not found: value println
println("hello, world!")
^
one error found


588 名前:デフォルトの名無しさん [2008/12/11(木) 23:27:20 ]
それからScalaのジェネリクスがC++とJavaのどちらと多くを共有しているかっていったら問答無用でJavaのほうだよ。
それでScalaやらないでC++やるっていうんだったら好きにすればいいと思う。
「C++にできてJavaにできない○○があるが、Scalaではどうか?」って聞いてくれればがんばって答えてみるかも。

589 名前:582 mailto:sage [2008/12/11(木) 23:38:37 ]
>>586
ワイルドカードの下限境界の事言ってる?あれは「型を使う側」で明示的に指定しない
といけないという点で違うし、制限も強い。ワイルドカードに相当するのは、Scalaだと
Existential Typeだね。

590 名前:デフォルトの名無しさん [2008/12/11(木) 23:42:16 ]
いや、だから反変がJavaにはないっていうのは違うでしょ?

591 名前:582 mailto:sage [2008/12/11(木) 23:54:19 ]
いや、A <: B => T[A] <: T[B]であるような、厳密な意味での反変はやはり無いと
言って良いと思う。Javaの場合、A <: B => T[A] <: T[? extends B]なわけだし。
ただまあ、誤解を招く書き方ではあったかもしれんとは思うけど。

592 名前:582 mailto:sage [2008/12/11(木) 23:58:46 ]
すまん。共変と反変が逆になっとる。正しくは、以下。

いや、A <: B => T[B] <: T[A]であるような、厳密な意味での反変はやはり無いと
言って良いと思う。Javaの場合、A <: B => T[B] <: T[? super A]なわけだし。
ただまあ、誤解を招く書き方ではあったかもしれんとは思うけど。



593 名前:デフォルトの名無しさん [2008/12/12(金) 08:35:32 ]
>>569 です。582 さん、詳細に答えて下さり感謝します。

「Java の generics では、下のように extends を使う。デフォルトでは Object を継承
する」との説明を読んで、これは制限が強すぎると感じました。List, Vector, Map など
の素直なコレクション・ライブラリを記述するには型チェックが有効に働くでしょう。で
も使いもしないメソッドにまで型チェックが利いてしまうのでは、generic なライブラリ
を作るほうが大変だろうと推測していました。

  public static <T extends Comparable<T>> boolean greater(T t1, T t2) {
    return t1.compareTo(t2) > 0;
  }

だからこそ、List(Any) と書けるようにしたのだと思います。


反変/共変は理解できていませんが、皆様の議論を見ていると scala では型チェックを
重視・活用しているように思えます。OCaml でのようにコンパイル段階でエラーを検出・
指摘することに拘っているのだろうと推測します。

Python duck typing のように、実行時にエラーを吐き出していたのでは、ビジネス用途
で使い物にならないのだと思います。C++ template でのように、大量の意味を掴みにく
いエラーメッセージを吐き出すことは、scala ではないのだと思います。

もうすこし調べてみます。ありがとうございました。


594 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 18:54:30 ]
相対論スレかと思った

595 名前:デフォルトの名無しさん [2008/12/13(土) 00:12:24 ]
scalaを使うと並列処理がとても上手く書けると聞いた
そのメカニズムを教えてくれないか?

596 名前:デフォルトの名無しさん [2008/12/13(土) 00:15:40 ]
関数型だから??

597 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 00:19:00 ]
www.scala-lang.org/node/50

598 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 12:45:16 ]
>>587
あえて print1n にしてエラーメッセージ出させるとうちの 2.7.2 final では
(fragment of HelloWorld.scala):1: error: not found: value print1n
print1n("Hello, world!")
^
one error found
!!!
discarding <script preamble>
となる
エラーメッセージ冒頭が違うのは何故?

599 名前:デフォルトの名無しさん [2008/12/13(土) 15:09:29 ]
なんか結局Java7にクロージャ入らないらしいので
結構本当にScalaの時代が到来するのではないか。

600 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 16:38:09 ]
ないないw
エッジな人達はとっくに関数型に行ってるし
そうでない人にScalaは無理
下級兵士はこれからもJavaだよ

601 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 17:03:06 ]
俺もScalaの時代が来るかについては否定的だけど
Javaな人に関数型の考え方を知ってもらう教材としてScalaは悪く無いと思う
適切なドキュメントさえあればScalaを学ぶのはそう難しいことではない

602 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 19:49:40 ]
エッヂな人達って関数型に行ってもやっぱり実際に物作るのはC++とかスクリプトとかじゃないの?



603 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 20:37:13 ]
エッチな人なので関数型言語でWEBクローラつくりました

604 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:32:32 ]
>>599
RubyでいうRuby on Railsのようなキラーライブラリの爆発のようなもの必要だな

Liftはあるが、採用実績はまだこれからだ
Lift Web Framework: Home
demo.liftweb.net/

↓後はLiftのようなものを流行らせるなら、こういう記事がもっと増えて、
InfoQ: David Pollak氏 lift と Scala を語る
www.infoq.com/jp/news/2008/03/liftweb

さらにこういう本まで出版しないと
Amazon.co.jp: JavaからRubyへ ―マネージャのための実践移行ガイド: Bruce A. Tate, 角谷 信太郎: 本
www.amazon.co.jp/dp/4873113202
images-jp.amazon.com/images/P/4873113202.09.MZZZZZZZZZ.jpg

おれ自身はRuby好きだけど、静的の魅力も知っているとScalaにすごく期待したくなるわけだよ

605 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:38:38 ]
liftよりWeb Flavorに期待してる。あと、WicketはJavaよりScalaの方が書き易そうな気がするんだ。

606 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:46:11 ]
昔はEJBが駄目すぎたけど今や
生産性なんて言語やフレームワークでそんなに違うかって思う
それより絶対性能の高さや簡単に数十台規模のシステムを開発できる
フレームワークでも作ってくれた方がありがたい

607 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:54:45 ]
>>601
Javaな人に関数型を知ってもらうなら、Groovyでどうよ?

608 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:56:17 ]
>>606
実際は大して違わないんですよ。

それよりも大事なのは
10分でブログが作れます、的なアトラクションや
コードが少なくてすみます、的な表向きな利点(実際はテストコードてんこもりで大して変わらん)

他に・・・

何がいると思いますか?

609 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:05:36 ]
>>607
Groovyは関数型の要素が少な過ぎると思う。無名関数くらいじゃない?
しかも、そのくらいなら今どきの言語のほとんどが持っている機能だし
それにGroovyは関数型的な(immutableな)データ構造を作成するのを助けてくれないよね
Scalaは関数型的なデータ構造を作りやすい構文になってるので、その点でもScalaの
方が良いと思う

610 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 09:48:57 ]
「関数型的なデータ構造」なんて曖昧な言葉は使わずに、
「代数的データ構造」と言いましょう。

611 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:17:44 ]
>>610
代数的データ構造と言っちゃうとかなり範囲を限定しちゃうでしょ
immutableなデータ構造全般を指すつもりで関数型的なデータ構造と書いた

612 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:29:23 ]
コンストくらいしかないような



613 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:07:17 ]
>>598
Ubuntuでsynapticから入れたんですけど、
エラーになるんです。

$ scala -version
Scala code runner version unknown version -- (c) 2002-2006 LAMP/EPFL

こんなになるんです。

614 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 00:37:57 ]
2.3.0 のようです
ttp://ubuntuforums.org/showthread.php?t=662629
ちなみに Debian の Etch も 2.3.0

Java 系はプラットフォームを汚すことはめったにないので、
Scala ホームサイトから直落としでも良いかと
Debian の Java は GNU 系に力を入れてるんで、 Sun 系の
方はまだまだです

615 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 20:28:40 ]
>>614
アドバイスありがとうございます。
tar落としてきてやってみたらうまくいきました。

616 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:37:24 ]
neopythonic.blogspot.com/2008/11/scala.html

617 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:15:12 ]
>>616
最初の学習曲線が厳しいようだ
私は Odersky の文章のまずさ (英語ネイティブでないのでしかたないのだが)
が最初にして最大の壁になるだろうな、と言語仕様を読んでて思ったが

618 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:58:38 ]
>>617
俺は英語能力あまり無いのでOderskyの文章のどの辺がまずいのかあまり
よくわからんかったのだが、たとえば言語仕様のどの辺の文章?

619 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:26:02 ]
どの辺というか、全体的に大ざっぱすぎたり専門的すぎたり、てか
書きぶりなどからして文章書いてる時間的余裕がなさげな感じ
明白なミスはほとんどないんだけど (616 紹介中の文章で can learning と
かあってわらたw)、肝心なところで何十回も読まないと何が言いたい
のか的を得なかったり、もっと簡単に言えるところを妙にまわりくどく
表現したり
まあさすがに数十回も読み直すうちに慣れましたが
(だから、例の本も当人が書くと知ってちょっと不安に思いますた、買う
予定ないけど)

620 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:55:36 ]
私は、どうしてこういう機能や文法が必要なのか、
その説明が少ないんじゃないかなと思いました。
特に代数データタイプに通じてない人は
何が何やらさっぱり分からないんじゃないかと。
どうしてこういう形式を採用したのかが。

621 名前:デフォルトの名無しさん [2008/12/19(金) 07:48:40 ]
仕様書はどこでも大体そんなもんでしょう。By Exampleは読んだ?

622 名前:620 mailto:sage [2008/12/19(金) 11:19:41 ]
www.scala-lang.org/node/143
も結構よんでいるから俺は全然問題ない。
ただこういうのを読まずに始めたい人、
代数データタイプの知識のない人、
そういう人への「解説」がない。




623 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 19:32:43 ]
英語に文句を言う前に
「的を得ない」という間違った日本語を使わないようにしようぜ。

624 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:04:29 ]
scalaの公式サイトに雪が降ってるじゃないか!

625 名前:デフォルトの名無しさん [2008/12/19(金) 20:06:17 ]
凄い!!

626 名前:619 mailto:sage [2008/12/20(土) 12:41:14 ]
>621
てか、英語日本語ともネット上で読めるものはすべて読みました、でも結局、
622 さんの言うように、OCaml、Haskell さらにジョイン計算理論まで目を通した
上で読み返してはじめて得心しました
ちなみにそんな私の Scala 評価は、
増築しまくりな OCaml よりはすっきり
原理原則にこだわって常時遅延評価を意識する必要が (少なくとも使用初
期には) ある Haskell よりは気が楽
オブジェクト指向はジョイン計算の具現と知って納得
といった感じス

627 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 13:02:53 ]
>>626
他の言語の仕様書(英語)は読んでみたことある?
俺はScalaの言語仕様の文章が特にわかりにくいとは感じなかったな。

628 名前:619 mailto:sage [2008/12/20(土) 13:05:01 ]
>623
古来中国では「的を射ない」ことを「失鵠」とも表現していました (鵠 はこの場合的の
中心の黒丸のこと; 正鵠など)
だから「失う = 得ない」で「漢字の用法」としては必ずしも間違っておらず、事実厳密
な議論では「どちらも可」となっているようです
ただなるほど国語辞典などでは「的を射る」の方しか載ってないので、「普通の日本
語」としては「的を得ない」は非推奨、ということになるようです
実際には「的を得ない」の方がはるかに広く使われてるようですが

629 名前:619 mailto:sage [2008/12/20(土) 13:08:52 ]
>>627
Java、ECMAScript と E4X をざっと
ほかは Scheme や Haskell などは日本語訳でだけス
てか、これらの文章が良すぎだったのかな?

630 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 13:34:20 ]
>>629
PrologのISO規格書が面白いのではないか。スタックモデルで説明している。
BNFも併記されてたと思うけど。

631 名前:619 mailto:sage [2008/12/20(土) 13:44:50 ]
Prolog は、MSX のころに 98 用 BASIC で記述されたミニマム Prolog を移植して
ちょっと遊んで以来
ちなみに自分初の処理系移植実装な経験 (懐
もしかして誤解されてるかもですが、別に言語仕様マニアではなく、Scala では
チュートリアルでも ByExample でも「全体像」がさっぱり会得できなくてしかたな
く言語仕様にトライするしかなかっただけなのでス

632 名前:デフォルトの名無しさん [2008/12/20(土) 14:58:39 ]
まあ少しずつやっていきなよ。



633 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 15:34:12 ]
>>628
漱石枕流乙

634 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 18:45:34 ]
ジョイン計算理論って何よ

635 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:33:44 ]
>>634
たぶんJoin-calculus
en.wikipedia.org/wiki/Join-calculus
のことだと思う。全然知らないけど、分散計算の形式的な計算モデルの一つらしい

636 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:57:19 ]
>>634
ラムダ計算を並行性の観点から鍛え直したのがパイ計算
ttp://web.yl.is.s.u-tokyo.ac.jp/kobalab/kadai99/picalc.html
で、それにさらに場所階層性を導入したのがジョイン計算
ttp://jijixi.azito.com/cgi-bin/diary/index.rb?date=20070531
(すごい分かりやすい pdf があったけどパスワード封鎖されたようで、
現状で日本語での記事はこの程度しか見あたらず、2 項目の JoCaml
の部分)
ちなみに OCaml から JoCaml を作る過程で練り上げられた理論っぽい

637 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:38:54 ]
なるほど
Scalaのどの辺がそれに基づいてるの

638 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 00:30:03 ]
「Scala開眼」を書いた人がこの中にいるな

639 名前:620 mailto:sage [2008/12/21(日) 00:58:28 ]
>>637
Scala.Actorsとか。
こういうのは仕様書やライブラリのAPI見れば分かる話じゃないよ。
知っているのと知らないのでは理解の速度が全然違うし、
モデルの把握もしやすくなる。

>>626の言うようにScalaはいろいろといいところがあるんだけど、
解説文が少なくてあまり理解されてないと思う。
まあ>>622にある論文読めばいいんだけどw



640 名前:636 mailto:sage [2008/12/21(日) 11:12:25 ]
Scala のオブジェクト指向導入は ML 系からのアバウトな逸脱ではなく、ジョイン
計算の場所階層性 (プロセスは「場所」に属し、チャネルはその場所階層を上
位へとさかのぼりつつ目的のプロセスを検索する) をクラス階層と解釈しての
きちんとした理論を背景とするものである、ということ
これで何がうれしいかというと、プログラムの実行時エラー皆無性が計算で事
前に証明可能になる、つまり静的型のエラー回避性が動的結合にも延長でき
るようになる
ということらしい

641 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 19:37:52 ]
> つまり静的型のエラー回避性が動的結合にも延長できるようになる

面白そうですが、今の型システムで回避できなくて、join計算で回避できる
ようなエラーってどういうもの?

642 名前:640 mailto:sage [2008/12/21(日) 20:19:02 ]
先の今は見れない pdf では純粋にプロセス間通信に限ればそこにおける
予期せぬエラーが理論上ゼロとなることを証明してました 、たしか
むろん、ハードのエラーとかプロセス間通信以外に起因するエラーは回避
不能なはずですが
ちなみに、パイ計算の方はたしか理論上どうしても無限回帰になってしま
う場合があったはず (非理論的なメタ制約を与えれば回避できるようですが)



643 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 13:02:43 ]
>>639
Actorとπは別もんだろー。

644 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 18:35:11 ]
Scalaのpattern matchingは、
Join calculusとの関係が深いです。例えば、
ALGEBRAIC PATTERN MATCHING IN JOIN CALCULUS
arxiv.org/pdf/0802.4018
そのpattern matchingを使えば、
多くの並列計算モデルが、
「ライブラリとして」実装できるというのが、
Scalaの核の一つです。
Scala.Actorsはその実装の一つで、
ライブラリのソースも公開されています。
ちなみにお父さん言語のFunnelでは、
もっとJoin calculus丸出しの文法でした。

645 名前:デフォルトの名無しさん [2008/12/23(火) 01:09:04 ]
【Programing in Scala】ついに届いた(笑)

自主学習進みすぎて、最早入門書は要らないんだがな・・

646 名前:デフォルトの名無しさん [2008/12/23(火) 11:24:49 ]
ついに購入者が!!
どこで注文したの?

647 名前:デフォルトの名無しさん [2008/12/23(火) 17:24:59 ]
>>646
Artimaのサイトで9月くらいから予約済

648 名前:556 [2008/12/23(火) 23:14:15 ]
2.7.3 RC1
www.scala-lang.org/node/417
はやっ

649 名前:デフォルトの名無しさん [2008/12/23(火) 23:33:16 ]
ちゃんと日本にも発送してくれるんだ
かなり待たされたね

で、結局Amazon.co.jpではいつまでたっても買えないんだろうか??

650 名前:デフォルトの名無しさん [2008/12/24(水) 07:02:59 ]
Scalaで実行時にScalaのソースファイルをコンパイルして
出来たクラスのメソッドをリフレクションで実行したい時ってどんな風に書く?

651 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 09:08:48 ]
>>624
ほっとくとめっちゃCPU食うよ
職場着いたら部屋が微妙に暖かかった…

652 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:46:47 ]
プログラミングしりとり
schiphol.2ch.net/test/read.cgi/575/1010948472/l50



653 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 21:57:01 ]
>>650
Scala コンパイラソースの
scala/tools/nsc/Interpreter.java interpret メソッド (475 - 520 行)
427 - 432 には compileSources、437 - 438 には compileString なんてメソッドも
ただし当然 scala-compiler.jar もクラスパス組み込みのこと

654 名前:653 mailto:sage [2008/12/24(水) 22:00:54 ]
あと、883 - 898 の loadAndRun: メソッドで名前どおりリフレクションロード & 実行

655 名前:デフォルトの名無しさん [2008/12/24(水) 22:11:43 ]
>>653-654
thx!

656 名前:デフォルトの名無しさん [2008/12/25(木) 10:19:00 ]
www.ibm.com/developerworks/jp/java/library/j-scala04298.html
>trait が実際にクラスの一部として組み込まれるまで
>trait の振る舞いの定義はチェックされません。
>あるいは別の言い方をすれば、trait を使用するクラス定義の中に
>組み込まれるまで適切さをチェックされないメソッドを定義することができます。

これはどういう意味か教えてください

あとclassに出来てtraitに出来ないことってnewだけで、
他は何でも出来るという理解でいいのでしょうか

657 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 11:07:52 ]
「late binding」ってことだけど。
C++0xだとtemplate/conceptで使うlate_checkってキーワードが増えてます。
これがないと、

> あとclassに出来てtraitに出来ないことってnewだけで、
> 他は何でも出来るという理解でいいのでしょうか

となって全く使えない。


658 名前:657 mailto:sage [2008/12/25(木) 11:49:07 ]
ibm.comが調子悪かったからみれなかったけど、
具体例でちゃんと説明書いてあるじゃん。
良く読みこなそう!

C++はブロックごとに指定。

template <Semigroup T>
T add(T lhs, T rhs)
{
return x + y; // Semigroup<T>::operator+
}

template <Semigroup T>
T add(T lhs, T rhs)
{
late_check {
return x + y; // class Tのoperator+
}
}



659 名前:デフォルトの名無しさん [2008/12/25(木) 11:53:12 ]
C++ 0xのlate_checkはコンセプトじゃなくて
生成したソースコードで判断するというものですよね
traitはそれに近いようなことをやってるということですか?

具体的にどういうコードを書けば遅延バインディングされるんですか?

660 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 13:05:13 ]
www.ibm.com/developerworks/jp/java/library/j-scala04298.html
のどの部分が分からないの?

661 名前:デフォルトの名無しさん [2008/12/25(木) 13:10:45 ]
>>660
>trait が実際にクラスの一部として組み込まれるまで
>trait の振る舞いの定義はチェックされません。
>あるいは別の言い方をすれば、trait を使用するクラス定義の中に
>組み込まれるまで適切さをチェックされないメソッドを定義することができます。

この文章以外は分かりました
traitのメソッドでも定義されていない変数なんかを使えば普通にコンパイルエラーになるので
適切さをチェックされないメソッドというのがどんなものなのかが分からないのです

662 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 16:30:05 ]
trait 中の定義は、実際にはそれを実装するクラスか、あるいはスーパークラス
内のプライベートメンバとしてその本体は別名定義され、trait 中のシグネチャが
それにアクセスするゲッタセッタの形になります
また、trait からはそれが指定される位置以前のほかの trait などの名前が見え
るようになっています。このため、指定順を入れ替えると動作が変わることもあ
りえます



663 名前:アク禁解禁 mailto:sage [2008/12/27(土) 16:40:54 ]
>>661
Orderd[A]の例だと
def compare(that: A): Int
の定義の存在はチェックされずに、Ordered[A]をコンパイルできます。
Object withするまで定義の存在はチェックされないわけです。
宣言の正当性はチェックされているのですが。

664 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 22:36:35 ]
scala.xml.NodeSeqの\\メソッドでXPath式っぽいのをかけるけど
これXPathにしなかったのはなんでだろう。
素直にXPathが使えればもっと簡潔にかけるのに。
あと属性のパターンマッチできないのも中途半端。これは属性定義が順序をもたないからだろうか?

665 名前:デフォルトの名無しさん [2008/12/27(土) 22:38:44 ]
>>662-663
なるほどありがとうございます

666 名前:デフォルトの名無しさん [2008/12/28(日) 10:58:57 ]
XPathを完全に実装しようとおもったらノードの構造をZipperとかにしないといけなくなる。

667 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 20:52:47 ]
本家サイトで XML の鉄人の参加を募集してることからして、そっちの方は
まだ十分にカバーできてないっぽい感じ

668 名前:デフォルトの名無しさん [2008/12/28(日) 21:23:08 ]
>>666はよく考えたら違うな。
XPathをフル実装してかつ不変な構造にしたかったら、だな。
なんか関数型言語脳になってきたのかもしれん。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<158KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef