2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

関数型プログラミング言語Haskell Part18

1 :デフォルトの名無しさん:2012/03/16(金) 21:54:23.92
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/

2 :デフォルトの名無しさん:2012/03/16(金) 21:54:40.15
関連書籍
・Introduction to Functional Programming Using Haskell (2nd ed.)
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/

・Haskell: The Craft of Functional Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/

・The Fun of Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/

・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/

・入門Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/

・ふつうのHaskellプログラミング
 ttp://item.rakuten.co.jp/book/4052963/

・Programming in Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/

・Real World Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980

・関数プログラミングの楽しみ
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056

3 :デフォルトの名無しさん:2012/03/16(金) 21:55:18.42
関連リンク
・GHC Wiki
 ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex

・A History of Haskell
 ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/

・関数型関連の用語集
 ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/

・本物のプログラマはHaskellを使う
 ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend

・Haskell API search Engine
ttp://www.haskell.org/hoogle/

・Real World Haskell
http://book.realworldhaskell.org/read/

・Learn You a Haskell for Great Good!
http://learnyouahaskell.com/chapters

【簡単な使い方】
1.検索バーに関数名を入れて検索
 例 map
2.検索バーに型名を入れて検索
 例 (a -> b) -> [a] -> [b]

4 :デフォルトの名無しさん:2012/03/16(金) 21:55:48.46
関連書籍 つづき

・Haskell: The Craft of Functional Programming (3rd ed.)
http://www.haskellcraft.com/craft3e/Home.html
http://www.amazon.co.jp/dp/0201882957/

・Learn You a Haskell for Great Good!
http://learnyouahaskell.com/
http://www.amazon.co.jp/dp/1593272839/

5 :デフォルトの名無しさん:2012/03/16(金) 23:38:20.95


6 :デフォルトの名無しさん:2012/03/17(土) 02:19:03.09
HTTPサーバアプリケーションって、yesod が主流になるのでしょうか?
Mightyってのがあった気がするんですが、廃れたのでしょうか


7 :デフォルトの名無しさん:2012/03/17(土) 15:47:42.83
HTTPサーバとか、メモリをどんどん食い尽くしてとんでもないことになる気がするんだけど、きちんとGCしてくれるのかな…

8 :デフォルトの名無しさん:2012/03/17(土) 20:34:27.93
HaskellのGCってJavaの足下にも及ばないの?

9 :デフォルトの名無しさん:2012/03/17(土) 20:37:20.93
Javaみたいにプロのベンダが作ってるわけじゃないしな…

10 :デフォルトの名無しさん:2012/03/17(土) 22:23:40.81
GHCのGCはすごくまともに動くと思う
インクリメンタルGCとか凝ったものはないけど

11 :デフォルトの名無しさん:2012/03/17(土) 23:32:54.22
>>1



12 :デフォルトの名無しさん:2012/03/17(土) 23:50:09.99
>>6
よく知らんが、ちょうど今月号のWEB+DB PRESS vol.67の濃縮還元オレンジニュースって記事には、"Haskellで書かれたWebフレームワーク「Yesod」のチュートリアル"というタイトルで初心者向けのチュートリアル記事を書いたと言う記事がある
その中から引用する限りじゃ、Yesodは主要フレームワークの一つらしい

以下、記事を引用

Haskellの主要Webフレームワークには、Yesod、Happstack、Snapの3つがありますが、その中で比較的初心者が取り組みやすくコミュニティが活発なことからYesodを取り上げています。




中略



HaskellのWebフレームワークがRailsやPHPはもとよりNode.jsよりパフォーマンスに優れていることを示しています。


13 :デフォルトの名無しさん:2012/03/18(日) 01:31:10.89
javaのtomcatみたいなものか…


14 :デフォルトの名無しさん:2012/03/18(日) 01:51:05.93
Yesod は Hello World を見ると初めギョッとするが、
考え方を理解すると、非常に洗練されてて理にかなっていることが分かる

15 :デフォルトの名無しさん:2012/03/18(日) 14:39:00.03
C 言語側で次の定義の関数 f をインポートする場合

enum EEE { EEE0, EEE1 };
void f (enum EEE x) { ... }

Haskell 側では、次のようには「できない」ですよね

data TTT = TTT0 | TTT1 deriving (Enum)
foreign import ccall "f" g :: TTT -> IO ()

これは、関数 g の引数を CInt 型にするしか無いのでしょうか

http://en.wikibooks.org/wiki/Haskell/FFI#Enumerations
ここに、hsc ファイルで #enum マクロを使った列挙型の例がありますが、
これも結局は CInt を Haskell 側のスタブ関数の引数にしていますよね
これって、rule gauss15 とかやらずに 100 とかリテラルを直接書いても
コンパイルは通ってしまうので、型的に安全とは言えないと思うんですよ

これは FFI で列挙型を含む外部関数を使う以上仕方のないことなのでしょうか
構造体は Storable クラスのインスタンスにすれば型的に安全に扱えるので、
列挙型も何かできるといいのですが

16 :デフォルトの名無しさん:2012/03/18(日) 15:23:26.46
hsc2hsは全然使ったこと無いから解らんが、
とりあえずnewtypeにしてんだから、データコンストラクタとアクセサ(例の場合ならIntegrationRuleとrule)をエキスポートしなけりゃ、
モジュールの外ではCIntとして扱えないんだから問題なくね?

17 :デフォルトの名無しさん:2012/03/18(日) 16:01:26.89
c2hsのenum defineルールを使った場合でも
toEnum 100 :: IntegrationRuleした時に実行時エラー吐くのが関の山だな


18 :デフォルトの名無しさん:2012/03/18(日) 16:08:26.89
>>16
リンク先では、hsc2hs で作った Enum 型を
次のように使って C 言語側の関数に渡しています(途中省略しました)

status <- c_qag gsl_f
  (realToFrac a)
  ・・・
  (rule gauss)
  ・・・
  errorPtr

この c_qag gsl_f 関数は名前や使われ方から見て
きっとどこかで foreign import されていると思いますが、
リンク先のページにはその定義は書かれていませんね

しかし、おそらく c_qag gsl_f :: CFloat -> ・・・ -> CInt -> ・・・
のような定義だと思います(そうでなければ型エラー)

これ、c_qag gsl_f (realToFrac a) ・・・ 100 ・・・ errorPtr
のように使用しても型エラーにならずにコンパイルが通ってしまいますよね

import された実際の C 言語側の関数で、不正な値の引数を検知して、
戻り値でエラーコードを返すような定義になっていればまだ良いのですが、
そうでなければ何が起こるか分からず、危険です

Haskell 側でこの 100 というリテラルをコンパイル時にエラーとして検知できないか、
という趣旨の質問でした

19 :デフォルトの名無しさん:2012/03/18(日) 16:12:59.75
>>17
そうなんです

たとえ私が >>15 で「できない」と言った方法が使えたしても、
Enum クラスのインスタンスでは toEnum 関数を使われてしまいます


やはり、こういう時こそ Template Haskell の出番ですかね

20 :デフォルトの名無しさん:2012/03/18(日) 16:22:13.05
Yesod上でWordPressやEC-CUBEみたいなキラーアプリが出来るといいね
WordPressは単に便利なだけでなくて、コードが抽象化されてなくてベタな設計なのが良くも悪くもサイト制作側で受けてる
EC-CUBEはみんな泣きながらカスタマイズしてるけど、自作したら得られない決済系の実績があるから使ってる
Yesod広めたいんなら、なんでみんなPHP使うのかにヒントがあるんじゃないかな?

21 :デフォルトの名無しさん:2012/03/18(日) 16:54:34.49
できるとしたら値から型、型から種の持ち上げを利用した
整数リテラルから型レベル整数、そしてそれに対応したインスタンスとしてtoEnumを定義したEnumを使うというものぐらいだな
これならばコンパイル時にS (S (S ...))のインスタンスが見つからないという旨のエラーになる筈

これはリテラルとしてハードコーディングされた(コンパイル時に決まる)整数とそれ以外を区別するということでもあるのだが
そんな機構があっても使いこなせる人は極少数にしかならんというのはC++のconstexprがいい前例となってるのであまり期待はできないな

22 :デフォルトの名無しさん:2012/03/18(日) 17:05:06.11
>>18
リンク先のImports and Inclusionsの項のソース見て欲しいんだが、
エキスポートされてるのはqag関数と定数 gauss15, gauss21...だけになってるじゃない?
本体のc_qag関数とか、IntegrationRule型のデータコンストラクタとアクセサはエキスポートしてないから、外からは使えない。
って、事は(IntegrateRule 100) とかリテラル渡すようなコード書けるのはモジュールの中だけだし、
qag関数に渡ってくるのは、基本的にエキスポートした定数のウチどれかしかありえないわけよ。
だから後はモジュールのテストを十分尽くせば、>15が思ってるような不安はない、って事を言いたかった。

モジュール内でもエラーになるようにしたい、っていうのが趣旨だったならまぁちょっとずれた回答だったかもしれんが。

23 :デフォルトの名無しさん:2012/03/18(日) 18:02:30.69
>>22
すいません、おっしゃってることの意味がようやく理解できました
趣旨を勘違いさせてしまったようです

私が訊きたいことは、FFI で列挙型を含む C 言語の関数を使う場合に、
関数に渡す値の範囲をその列挙型の中に限定する方法は無いか、
という事でした

なぜなら、C 言語の列挙型の値は C 言語の int 型ですが、
Haskell の foreign import の型シグネチャで CInt を使うと、
列挙型の範囲を超えた値も構文上何も問題なく渡せてしまえるからです

リンク先の記事を示したのは、hsc2hs の #enum マクロを使ったとしても、
結局のところアクセス関数が自動的に作成されるだけであって、
アクセス関数を使わなければその関数を使えない訳ではない、
だからその方法も今回の問題解決には使えない事を言いたかっただけでした


今のところ、foreign import の型シグネチャでは CInt 型を使い、
それとは別に、その関数を呼ぶだけの別名の関数を定義し、
そのシグネチャで C 言語の列挙型の値の範囲に対応したデータ型を使い、
後者の関数のみをモジュールから公開することで、
モジュールの利用者には範囲外の値が利用できないようにしています

確かに、このように余計な関数を定義しても、インライン展開されて、
実行速度上はほとんど何の問題もない筈ですが、けっこう無様です

なにか別の案はないですかという趣旨でした
とりあえず、上記の方法で我慢します

24 :デフォルトの名無しさん:2012/03/19(月) 01:31:28.47
おい前スレで指定の確率分布に従うランダムジェネレータが欲しいといったら
自分で作れとか言ってきた奴
staticパッケージという素晴らしいものがあったじゃないか
全く隠してやがったな

25 :デフォルトの名無しさん:2012/03/19(月) 07:09:37.10
http://www.amazon.co.jp/dp/4903814351/
せっかくこういう本もあるのだから、自作するのもいいと思うんだが

26 :デフォルトの名無しさん:2012/03/19(月) 08:24:52.24
staticじゃねーstatisticsじゃねーかちくしょう

27 :デフォルトの名無しさん:2012/03/19(月) 08:27:21.40
>>25
お前と違って研究費で落ちねえんだよ
高えよちくしょう

28 :デフォルトの名無しさん:2012/03/19(月) 12:33:02.16
>>27
私は地元の図書館で見つけました

29 :デフォルトの名無しさん:2012/03/19(月) 14:00:02.75
>>25
「この商品を買った人は」に、ちくま学芸文庫の甘利先生の本がでてきたのだが、
すごい装丁だw

30 :デフォルトの名無しさん:2012/03/19(月) 15:12:03.39
>>25
こんなニッチな本を誰が買うのかと思ったら機械学習系ブログがプッシュしてました。

隠れた良書「計算機シミュレーションのための確率分布乱数生成法」を大プッシュしたい
http://d.hatena.ne.jp/echizen_tm/20100710/1278781380
「計算機シミュレーションのための確率分布乱数生成法」でサンプリングのお勉強
http://d.hatena.ne.jp/echizen_tm/20100712/1278952192
計算機シミュレーションのための確率分布乱数生成法を買った
http://d.hatena.ne.jp/tkng/20101107/1289118743

31 :デフォルトの名無しさん:2012/03/19(月) 15:54:21.23
これがステルスマーケッティングと言うやつか

32 :デフォルトの名無しさん:2012/03/19(月) 20:13:39.54
べつにステマと言われようがどうでもいいよ

こういうのに興味ある人に、こんな本もあるのかと気づいてほしくて紹介しただけだから

興味が無ければ無視してくれればいい

33 :デフォルトの名無しさん:2012/03/19(月) 20:24:52.96
嫌儲厨はほっとけ

34 :デフォルトの名無しさん:2012/03/20(火) 01:29:25.44
ライブラリリファレンスの右上の隠しリンク便利だな
パッケージのモジュールが3画面分割で見易くなる

35 :デフォルトの名無しさん:2012/03/20(火) 10:02:14.10
隠れてねーじゃん

36 :デフォルトの名無しさん:2012/03/20(火) 10:22:45.60
それよりも、フレーム表示から元に戻すリンクを教えてほしい

37 :デフォルトの名無しさん:2012/03/20(火) 11:04:43.10
>>35
俺IE6なんだ。。。

38 :デフォルトの名無しさん:2012/03/20(火) 11:36:20.94
IE6 ってもう葬儀を済ませたんだろ
安らかに眠らせてあげろよ

39 :デフォルトの名無しさん:2012/03/20(火) 14:12:30.19
Haskelってどんな人種がどんな目的で使うの?優しく教えて

40 :デフォルトの名無しさん:2012/03/20(火) 14:50:48.49
個人的には、人種という言葉自体から差別的な響きを感じて使いたくないが、
目的の方でいうと、たとえば私の仕事場では単位時間辺りの
実質的な仕事の量と質を上げるために利用している

慣れというのもあるだろうが、初めから厳密な型を意識したプログラミングは、
そうでないCなどでのプログラミングと比較して、小さくて大量の(悩ましい)バグが、
コンパイルの段階で潰しやすく、実行時にはもっとアプリに本質的なバグの発見に集中できる
型推論の機能も、間違った型の使い方をコンパイル時に指摘してくれて助かってる

また遅延評価のおかげで、一連の大きな計算において、
その計算を意味の塊を基準にして個々のモジュールに分割しやすい

主にこれら2点が実質的な仕事の量と質を上げるだろうと目論んでHaskellを使い始めたが、
目的は見事に達成されている

ちなみに、たまたま私の部署は処理時間の短縮や計算リソースの削減を
厳しく求められるアプリを作るところではないため、Haskell のデメリットは表に出にくい

41 :デフォルトの名無しさん:2012/03/20(火) 14:56:30.41
Haskell -> C のトランスレータってないですかね?

42 :デフォルトの名無しさん:2012/03/20(火) 14:59:57.29
>>41
GCC がそれをやってくれる

43 :デフォルトの名無しさん:2012/03/20(火) 15:09:00.10
>>41
ghcのコンパイラオプションでCのコード吐けるけど?


44 :42:2012/03/20(火) 15:15:36.89
すまんこ

GCC じゃなくて ghc だ

45 :デフォルトの名無しさん:2012/03/20(火) 16:21:13.11
Perlで書いたコードは二度と見たくない

Haskellでコンパクトに書けたコードはまた見てみたくなる

Haskellは書くときにうんざりする

多言語は書いた後で絶望する

46 :デフォルトの名無しさん:2012/03/20(火) 23:58:58.60
要素数 n のリストが一つ与えられた時、
要素番号の重複を認めない m (0 <= m <= n) 個の要素からなる組み合わせを
全て集めたリストを作るのって、効率よくエレガントにやろうとすると意外に難しいな

とくにエレガントさって、自分でなかなか納得いくものができんよね

comb :: Int -> [a] -> [[a]]

comb 3 [1,2,3,4]
==> [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2,3,4]]

47 :デフォルトの名無しさん:2012/03/21(水) 00:22:47.67
SICPで見たような気がするけど気のせいか

48 :デフォルトの名無しさん:2012/03/21(水) 01:26:20.30
ベタに実装したbinary counting以上簡単にはならないと思う

49 :デフォルトの名無しさん:2012/03/21(水) 01:32:45.19
リストで縛るとどうあがいても遅そうだな。
要素リストは配列にぶち込んどいて、
インデックスの組み合わせ生成して列挙すんのがベターかね。

50 :デフォルトの名無しさん:2012/03/21(水) 02:20:06.92
let comb n xs = if length xs == n then [xs] else concatMap (\i -> comb n $ delete i xs) xs
こういう感じ?

51 :デフォルトの名無しさん:2012/03/21(水) 03:13:40.85
重複を含む配列からの組合せは?

ABBCDDDEFFGGGG
から5個選ぶ時の組合せを全て列挙せよ

みたいな

重複を許したものを吐き出してフィルターかけるのはもちろん駄目

重複が無い配列の時の組合せを応用してできるの?

52 :46:2012/03/21(水) 07:31:22.42
>>51
俺が取り組んだのは、元のリストは要素の対して重複を許し、
そこから選ぶ要素番号に対しては重複を認めないタイプの問題だった

たとえば、元のリスト xs から 3 つ選ぶ場合、
[xs !! 0, xs !! 3, xs !! 8] は許されるけど、
[xs !! 0, xs !! 3, xs !! 3] は認めない

まだ取り組んではいないけど、重複を許した方が多少記述が減るんじゃないかな

53 :デフォルトの名無しさん:2012/03/21(水) 09:34:51.31
AAAAAAAAAAAAAAAAA `comb` 3
だと酷いことになる

重複するリストから組合せ取り出す局面がどれほどあるか判らないけど

54 :デフォルトの名無しさん:2012/03/21(水) 15:31:44.99
アナグラム作成装置として使えそうだね。


55 :デフォルトの名無しさん:2012/03/21(水) 16:36:15.52
let mapcon f xs = concatMap (\i -> f $ drop i xs) [0..length xs -1]
let comb n xs ys | length ys == n = [ys] | xs == [] = [] | True = mapcon (\(z:zs) -> comb n zs $ z:ys) xs
もうあんまりエレガントとも思えないけど

56 :46:2012/03/21(水) 23:06:26.29
自分で作ったのは、こんな感じ

tails' :: [a] -> [[a]]
tails' [] = []
tails' [x] = [[x]]
tails' xs = xs : tails' (tail xs)

comb1 :: [a] -> [[a]]
comb1 xs = map (:[]) xs

combN', combN :: ([a] -> [[a]]) -> [a] -> [[a]]
combN' f (x:xs) = map (x:) (f xs)
combN f xs = concatMap (combN' f) (tails' xs)

comb :: [a] -> Int -> [[a]]
comb xs n = (iterate combN comb1 !! (n-1)) xs

使用例
comb [1,2,3,4,5] 3
==>
[ [1,2,3], [1,2,4], [1,2,5], [1,3,4], [1,3,5]
, [1,4,5], [2,3,4], [2,3,5], [2,4,5], [3,4,5] ]

n重ループを分解した感じ
自分で書いたコードだが、なんか自分でムカツク

57 :46:2012/03/21(水) 23:34:59.74
>>56
あれ、一つ前のバージョンをコピペってしまった
tails' は init . tails で、定義しないで直に使ってます

結局こんな感じ

comb1 xs = map (:[]) xs
combN' f (x:xs) = map (x:) (f xs)
combN f xs = concatMap (combN' f) (init $ tails xs)

comb xs n = (iterate combN comb1 !! (n-1)) xs

58 :デフォルトの名無しさん:2012/03/22(木) 01:58:12.62
combination だけはポインタある方が楽だわ


59 :デフォルトの名無しさん:2012/03/22(木) 08:19:30.23
comb 0 _ = [[]]
comb _ [] = []
comb n (x:xs) = map (x :) (comb (n-1) xs) ++ comb n xs
どうしてもってんならlength xsを最初に数えて持ち回せ。

60 :46:2012/03/22(木) 12:40:04.54
>>59
美しいですね

こういうセンスあるコードがスラスラと書けるようになりたい

61 :デフォルトの名無しさん:2012/03/22(木) 22:49:41.00
(x :)
ストライクウィッチーズのあの人に見えた

62 :デフォルトの名無しさん:2012/03/25(日) 04:51:06.13
(;x;)

63 :デフォルトの名無しさん:2012/03/25(日) 09:08:01.99
(:[]) ← 口を開けた顔; データを1つ食べて内容物のリストを返す


64 :デフォルトの名無しさん:2012/03/25(日) 22:18:09.21
書籍「関数型プログラミングの楽しみ」の練習問題 3.1 を考えてみました

これが非正格関数 h に対しては成り立たないのは、
h が実際にどのような関数なのか定義が分からないことには変換が進まないからでしょうか

例えば xs = Nil とした場合でも、

(h . foldL f e) xs
--> h (foldL f e xs)
--> ・・・ h を何に変換すれば良いのか不明 ・・・

もし h が正格関数なら、ここで

--> h (foldL f e xs)
--> h (let g zs = case zs of Nil -> e; Cons y ys -> f y (g ys) in g xs)
--> h (let g zs = case zs of Nil -> e; Cons y ys -> f y (g ys) in g Nil)
--> h e
--> e'

と変換が進む
もちろんこの場合は foldL f' e' からの逆方向の変換もできて等号が成り立ち、
また xs = Cons y ys の場合も構造的帰納法で等号が成り立つことが証明できる

非正格関数 h に対しては、h から先に評価しなければならず、
例えば極端な話 h = h では一向に簡約が進まなくなるから成り立たない場合もある

という理解で良いでしょうか

65 :デフォルトの名無しさん:2012/03/25(日) 23:14:33.16
hの正格性が必要なのは以下の等式が必要だからでしょう

q (case e of { p1 -> e1; ... pn -> en }) = case e of { p1 -> q e1; ... pn -> q en }


66 :64:2012/03/25(日) 23:21:45.04
すいません、けっこう混乱しています

それは、単に問題文を言い換えただけではないのですか?
結局 >>65 の場合も「なぜ q が非正格関数だとその等式が成り立たないのか」
を説明しないと練習問題 3.1 を説明したことにはならないような気がするのですが

67 :デフォルトの名無しさん:2012/03/26(月) 08:28:16.54
xs := ⊥
で両辺計算してみな

68 :デフォルトの名無しさん:2012/03/26(月) 22:04:32.42
64じゃないけど、

foldL f' e' ⊥ = ⊥
foldLは第三引数について正格な性質を持ってる。
ところが、例えばh = const xで非正格な関数とすると
(h . foldL f e) ⊥ = x
だから、h . foldL f e = foldL f' e'の融合則が成り立つには
hは正格関数でないといけない、ってことかな?

69 :デフォルトの名無しさん:2012/03/27(火) 03:34:38.13
Haskellを新しく勉強しようと、
まず日本語マニュアルhrefのインストールを下のサイトを参考に
「Haskellのリファレンスマニュアルを検索するツール href」
http://d.hatena.ne.jp/pcmaster/20090215/p2

$ make
$ mkdir -p /usr/local/share/href
$ export HREF_DATADIR=/usr/local/share/href
$ make bindir=/usr/local/bin install
$ sudo mkhref ref/*
mkhref: HREF_DATADIR: getEnv: does not exist (no environment variable)
このエラーが出て、ここから先に進めません。
こちらの環境はubuntuでghc7.0.3、libghc-network-devのパッケージがインストール済みです。
getEnv関数が手持ちのパッケージでは用意されていないのでしょうか、環境変数の与え方は大丈夫でしょうか
どなたかインストールできない原因分かりましたら教えていただけるとありがたいです

70 :デフォルトの名無しさん:2012/03/27(火) 19:41:43.97
漏れもハスケるためにう分津にGHCとか入れて準備万端だぜ


71 :デフォルトの名無しさん:2012/03/27(火) 21:53:06.47
>>69
sudoでmkhref ref/*したときに、
export HREF_DATADIR=/usr/local/share/hrefが効いてないと思う。
それと、ubuntuって/usr/local/share/href が一般ユーザで作れるのかね?
make instalもスーパユーザでやる必要があると思う。

適当にやるならこんな感じか。
$ make
$ sudo bash
# mkdir -p /usr/local/share/href
# export HREF_DATADIR=/usr/local/share/href
# make bindir=/usr/local/bin install
# mkhref ref/*
おわったらスーパユーザを抜けること

使うときもexport HREF_DATADIR=/usr/local/share/hrefが有効になるよう、
~/.profileかどっかに書いておく。

72 :デフォルトの名無しさん:2012/03/27(火) 22:40:37.45
>>71
Haskell とは何の関係もないが、

$ sudo bash
これやるくらいなら
$ su -
でいいと思うんだが


73 :デフォルトの名無しさん:2012/03/27(火) 23:34:13.91
>>72
su - だと、cdしなおさないといけないじゃん。
まあ、suだけにすればいいかもだが、rootのパスワードはなるべく入力したくないな。

74 :デフォルトの名無しさん:2012/03/28(水) 02:38:54.37
sudo -s はどう?

75 :デフォルトの名無しさん:2012/03/28(水) 03:12:56.50
スーパユーザになれれば何でもいいだろw
>>69は良く分かってないみたいだから、suでrootのパスワード入力させとくのが確実
sudoは設定ちゃんとしてないとうまく動いてくれないかもしれない

まあ、でも、sudo mkhref ref/* が一応実行されてるみたいだから、たぶんsudo -sでもsudo bashでもいいかな

76 :デフォルトの名無しさん:2012/03/28(水) 08:12:21.70
sudo -E でしょ

77 :デフォルトの名無しさん:2012/03/28(水) 23:03:43.68
Control.Exception に bracket 関数があるけど、
これって第1引数のアクション(イニシャライザ)で例外が発生しても、
第2引数のアクション(ファイナライザ)は実行さないよね

bracket 関数と同じ形で、
イニシャライザで例外が発生してもファイナライザが実行される関数は
標準ライブラリで用意されてるの?

それとも自作する必要がある?

同じ形というのは、イニシャライザの戻り値が
ファイナライザやコンピュテーションの引数として利用できるという意味

78 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 08:51:07.11
初期化が終わってないのにファイナライズとな…?

79 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 12:38:05.02
>>78
あぁそうか
言われてみれば設計がおかしいな・・・

見直してみるよ
ありがと

80 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:39:21.66
yesodの中の人がcabalの代わりのcabalaって記事出してたけど、
あれエープリルフールなんか?

81 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:52:29.02
cabal は実際に改善点が少なくないわけで、
エープリルフールならもっと分かりやすいネタにして欲しいもんだ

82 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 19:15:16.28
yesodくらいは、もうはじめからHaskellプラットフォームに入れておいてほしい

83 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 20:55:29.57
>>82
なんで?

84 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 21:07:15.70
>>83
スタンドアロン環境で使いたいから

85 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 21:11:00.55
yesodにcabalaでゆだやんってよく分かるんだけど、宗教色が強いのは
ちょと苦手かも。CLISPも同じなんだがな。

86 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 21:30:33.12
>>84
なんだよ、それなら Haskell Platform に hmatrix 入れろよとか、
yamapa 入れろよとか、wx や gtk2hs 入れろよとか、iteratee 入れろよとか

そういう単なる「〜だったらいいなぁ」というチラ裏と変わらんじゃん

いや、べつにそういうのがダメとは言わないけど、
もう少し Haskell 全体を考えたり、
もう少し本質的なことから論理的に導き出した要望かと思って期待してた

87 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 21:32:41.92
そう言えば、久々に yampa がバージョンアップしたな

88 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 05:31:58.67
>>87
ホントだ。
でもAnimasの改良取り入れただけかな?
コメントは書いてんのに、ドキュメントのスカスカっぷりは相変わらずゆがみねぇな…。

89 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 12:45:15.77
>>86
「Haskell 全体を考えたいなぁ」もチラ裏と変わらない

90 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 18:36:33.86
プログラミングHaskell とかゆー本買って来たぜ
今夜から枕の下に敷いて勉強する
これで漏れも立派なハスケラーだ

91 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 01:13:37.94
「プログラミングHaskell」って教科書としては優れてるとおもうけれど、
自習書としてはどうなんだろう。
新しい構文とかがけっこう説明なしにでてくるよね。
まあ文法は別の本で見ればいいのか。

あと8章が……



92 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 06:28:43.11
>>91
パーサーは難しいけど、モナドと同じで動かしてみないと、どういう働きか実感できない所があるな
ふつケルでも結局Wiki作る時に書かされるから、この本だけの特別ではない
(初心者置いてきぼりにしないように頑張ってる分だけプログラミングHaskellの方が親切ではある)


93 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 18:52:31.15
HaskellWikiを流し読みしてると色々面白そうなプロジェクトを見つけるのだけれど、
ほとんど開発が止まっているように見えるのは何故だろう

94 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 18:58:32.29
他の言語と違って研究の類いも含まれてるからね。
大学の研究ならほとんどが死んでいるプロジェクトで当然。
卒業したら放置なものが多いから。
これには悪い面もあるが、常に新しい風が吹き込む理由にもなってる。
そういうことも理解して使いこなしたほうがよい。
HaskellWikiも単なる道具に過ぎないのだから。


95 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 08:26:36.31
そのまま枯れたものとして扱っていいものもあると思うよ。
常に更新されている方がいいとも限らないのでね。
依存関係でおかしくなってるものを放置されてると困るけどね。

96 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 22:47:55.68
みんなHaskellに飽きたんだよ

97 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/06(金) 23:06:06.65
ghc7.2から[リスト内包表記]をモナドにも使えるようになったんだね
有用な使い道を教えてくれ

98 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 07:53:10.20
対角版リストモナドなんかも内包表記で書ける、とか

99 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 08:50:43.42
論理プログラミングDSLを自作モナドで簡単にかくためのもの

100 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 15:11:00.50
cabal の executable-profiling オプションって何に使うの?

101 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 15:50:48.11
cabal で何かパッケージをインストールすると gcc.exe が起動するけど、
インストール処理が終わった後も gcc.exe のプロセスが消えない

これって、正常じゃないよね

102 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 16:32:35.76
>>101
どうも、インストール処理の途中で強制終了させた場合に、
ghc.exe のプロセスは消えるけど gcc.exe のプロセスが残るみたいだ

理由はよく分かんないけど、まぁいいや
スレ汚してすまん、気にしないことにして自己解決した

103 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 22:45:37.91
gtk パッケージにある Graphics.UI.Gtk.Abstract.Widget.onExpose とかの関数って、
Deprecated のカテゴリに分類されてるんだけど、これって非推奨なんだよね

再描画要求のイベントが来た時に反応したいんだけど、
本当は何使えば良いの?

それとも非推奨じゃなくて、近い将来消える予定だけど、
とりあえず今のところはこれ使っとけって意味?

104 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 13:50:38.88
普通のhaskellにあるdata型フィールドの更新

data Anchor = A{aUrl,aLabel ::String}

href :: Anchor
href = A "http://hoge.com/" "hoge page"

main = do
print href
print (href {aLabel = "that"})

このコードだけだとAnchor型がprintの引数になるShowクラスのインスタンスではないから、
表示されないのはいいとして、
再代入(実際は再定義)「href{ aLabel = "that"}」
この上のコードでhrefのaLabelフィールドが"that"に変わって、aUrlはそのままになるらしいんだけど
普通にコンパイルエラー、これは可能なの?


105 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 14:22:21.53
href { aLabel = "that" }の型はAnchorだ
aLabelを更新してaLabelの値が返ってくるわけじゃない
Cの構造体とかはこうだけど

レコード更新構文は、既存の値から一部を変更しただけの新しい値を作りたいとき、
A { aUrl = aUrl href, aLabel = "that" }
と書かなきゃいけないところを
更新する必要のあるフィールドだけ書けばいいだけにする、というただの構文糖衣。

106 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 14:44:21.12
>>105
printが可能かではありません、誤解を招いてすいません(原文のままコードを記述したため)

href { aLabel = "that"}は実質、A { aUrl = aUrl href, aLabel = "that" }で
これはhrefを再定義する構文ではなくて、hrefとは別のAnchor型で,hrefのaLabelフィールドだけ変えた値を作っているということですね
hrefの再定義だと思っていたので、
href {aLabel = "that"}を単文でdoの中に入れたときにエラーでん?と思ったのですが納得しました

107 :デフォルトの名無しさん:2012/04/13(金) 18:13:46.76
なんかコメントあしばらく出てないけど、haskellの皆さんどうしたの?

108 :デフォルトの名無しさん:2012/04/13(金) 21:31:53.54
Windows7 で ghc や ghci を起動させようとすると、
初めの1回だけ、よく 0xc0000142 のエラーが出るよね

あれ何なの?

どちらももう一回トライすれば普通に起動するから、
そのまま使い続けてるけど、なんかマズイかな

109 :デフォルトの名無しさん:2012/04/13(金) 23:26:35.58
wx パッケージが 0.90 にバージョンアップして、
とうとう wxWidgets 2.9 only になった


110 :デフォルトの名無しさん:2012/04/14(土) 16:01:19.30
>>107
特に質問することが無いんだもん・・・
初心者でも簡単に書けるようになるのは良いけど、スレが盛り上がらないのも確かだな・・・


111 :デフォルトの名無しさん:2012/04/14(土) 16:10:39.33
>>108
出たこと無い・・・32ビットの頃では何も問題なかったし、今の64ビットでもghci上で(横に)長めの入力すると挙動が怪しくなるくらいかな
それでもrubyのirbよりは安定してるが・・・(すぐ激重になって使い物にならん)


112 :デフォルトの名無しさん:2012/04/14(土) 17:12:23.96
wx が ghc 7.4.1 環境にまともにインストールできるようなったのは喜ばしいし、
styledTextCtrl などのコントロールもちゃんと使えるようになったのはいいんだが、
ghc のリンク処理と、出力された実行ファイルの起動に時間がかかるようになった

特にリンクは時間かかりすぎ
コンパイル自体は普通に速いのに、リンクでフリーズしたかと思った
これは、wxWighets の方のビルド設定で改善できるんだろうか

あと、相変わらず ghci 上では実行できない

まぁ些細な問題だ
あとは wxPack が 2.9 にバージョンアップすれば初心者にも勧められる

113 :デフォルトの名無しさん:2012/04/14(土) 23:40:32.24
>>112
今 GLCanvas の対応とかどうなってるのか色々試してるけど、
前言撤回、些細な問題ではなかった

このリンクの遅さは異常だ、イライラする

メインウィンドウをひとつ表示するだけのプログラムでも、
オプション無しで ghc を実行して exe ファイルへのリンクするのに 50 秒以上、
その exe ファイルを実行してからウィンドウが表示されるまで 5 秒以上かかる

wxWidgets のビルドオプションをモノリシックと非モノリシックで両方試したけど、
どちらもリンクや起動の時間に対して目に見える影響はなかった

これ、俺だけ?
なにか改善する方法は無いんだろうか

とくに無ければ、少なくともバージョンアップするまでは gtk2hs を使うしかないな

[環境]
Windows7
ghc 7.4.1
wx-0.90

114 :デフォルトの名無しさん:2012/04/15(日) 08:47:17.26
副作用論争は、読んでいて面白かったが。今論争はないのか?。

不毛かもしれない宗教論争とはいえ、純粋志向のハスケラをおちょくっているのを見るのは楽しい。

この論争はハスケルには処理系を含めてあらゆるレベルで副作用がない、
という無理な主張から始まったと思う。

言語自体には副作用がない、でも、処理系には副作用があるようにみえる。
でも、それは勘違いだ。ハスケル処理系にもまったく副作用がないのだ。
副作用が発生しているのはハスケル処理系でなく、ハスケル処理系が
生成したDanoMoi処理系だ。

という主張がありましたね。

115 :デフォルトの名無しさん:2012/04/15(日) 09:33:43.50
釣れますか?

116 :デフォルトの名無しさん:2012/04/15(日) 09:34:37.44
頭悪そうw

117 :デフォルトの名無しさん:2012/04/15(日) 10:14:32.40
ごめんなさい

隔離スレ  http://toro.2ch.net/test/read.cgi/tech/1333801607/
で暴れてた馬鹿がこっちに逃げて来たみたいです
FizzBuzzすら書けない口だけ野郎なんで無視してもらって結構です

118 :デフォルトの名無しさん:2012/04/15(日) 11:13:37.90
>>114
http://www.kmonos.net/wlog/65.html
> 15:49 06/09/08 DanoMoi と Haskell
>決して「実際にそういう実装/理論になっている」という話ではなく、
>「こういう風に考えとけばわかる気がする」みたいな話なのでよろしくお願いします。
> ・Haskell プログラムには、一切いかなる意味でも副作用は存在しない
> ・Haskell プログラムは、"DanoMoi" というプログラミング言語のプログラムを生成する。
>"DanoMoi" という名前および概念は今私が勝手に考えたので適当ですよ。

プログラムと処理系は同じ意味だと思っているのですか?

119 :デフォルトの名無しさん:2012/04/15(日) 13:41:43.29
スパコンの世界じゃ、OSとハードウェアは同じ意味だしな…

120 :デフォルトの名無しさん:2012/04/15(日) 13:43:34.33
>スパコンの世界じゃ、OSとハードウェアは同じ意味だしな…
ないない。

121 :デフォルトの名無しさん:2012/04/15(日) 14:04:53.77
>>120
新しく世界一のスパコンを作った = ハードウェアとそれ専用のOSを作った(むしろハードウェアはそのままでOSだけを改良した)

122 :デフォルトの名無しさん:2012/04/15(日) 14:15:40.44
SISCマシンの設計図はハードウェアの設計図だろうか? ソフトウェアの設計図だろうか?

123 :デフォルトの名無しさん:2012/04/15(日) 15:59:38.46
>>119
アホ丸出しで恥ずかしくないの?

124 :デフォルトの名無しさん:2012/04/15(日) 16:04:00.61
>>123
大学でスパコンの講義受けるとOSとハードは同じだと教わるよ

125 :デフォルトの名無しさん:2012/04/15(日) 16:13:02.27
システムソフトウェアとハードウェアを一緒に開発しているだけの話で「同じ」ではない。

126 :デフォルトの名無しさん:2012/04/15(日) 16:24:20.62
>>125
スパコンは、ファイル管理システムとハードウェアとは不可分
逆に言うと、OSだけを取り出せと言われたら、LSIをペンチでいくつか取り出すことになる

DOS/V機やUNIXを使っていると分かりずらいが、UNIXで言うと、常駐ソフトとカーネルの一部がハードウェアそのものになってる

127 :デフォルトの名無しさん:2012/04/15(日) 17:03:17.98
何というデマ…

128 :デフォルトの名無しさん:2012/04/15(日) 17:08:26.97
通常ならOSで実現されている機能の一部がハードウェア上で実装されているとしても、
それを「OSとハードウェアは同じ意味」とか言っちゃうのは痛い。
さらにスパコンと呼ばれるものがすべからくそういう構成をとってると思い込んでるのも痛い。

129 : ◆0uxK91AxII :2012/04/15(日) 18:19:56.27
>>126
誰が教えたの?

130 :デフォルトの名無しさん:2012/04/15(日) 18:33:14.08
> UNIXで言うと、常駐ソフト

デーモンという言葉すら知らない幼稚園児レベルのド素人は、まずは幼稚園に行けば?

131 :デフォルトの名無しさん:2012/04/15(日) 18:36:50.24
だえもんさんなめてんの?

132 :デフォルトの名無しさん:2012/04/15(日) 18:38:20.84
>>126
ノードやバスのファームウェアも含めてアップデートするんで、ソフトウェアだけで配布されてますが?
使ったことないんじゃないの?

133 :デフォルトの名無しさん:2012/04/15(日) 18:43:44.98
スレチなやつは全員立ち去れ

134 :デフォルトの名無しさん:2012/04/15(日) 19:25:43.97
>>126, >>128
内容云々より、分かりずらいだのすべからくだの
日本語が気になってしょうがない

135 :デフォルトの名無しさん:2012/04/15(日) 20:38:41.03
ああ、日曜日だ・・・

136 :デフォルトの名無しさん:2012/04/16(月) 07:13:57.36
月曜日です。
関数型言語使いには無職が多いと聞きます。
皆が働いている時間に勉強や議論ができます。良かったですね!
今日も有意義に過ごしましょう!

137 :デフォルトの名無しさん:2012/04/16(月) 07:23:29.97
働いてるから、という不勉強の言い訳は、頭のおかしい企業以外では通らないよw

138 :デフォルトの名無しさん:2012/04/16(月) 07:23:33.83
みんな賢いからyoung retireして、余生を関数型言語のプログラミングで楽しんでるんだよ。知らなかった?

139 :デフォルトの名無しさん:2012/04/16(月) 07:53:15.45
>>136
今日も一日ドカタ仕事頑張ってね!

140 :デフォルトの名無しさん:2012/04/16(月) 07:54:30.89
匿名掲示板で職業なんてどうでもいいので少しはHaskellの話でもしませんか

141 :デフォルトの名無しさん:2012/04/16(月) 09:22:55.36
Haskellの話なんざHaskell Cafeだの#Haskell等で好きなだけしてろ

142 :デフォルトの名無しさん:2012/04/16(月) 10:07:06.63
ボクの分からないむずかしい話しちゃだめー

143 :デフォルトの名無しさん:2012/04/16(月) 21:46:45.82
>>128
実は正確にいうとスパコンに限らず、そこら辺のAT互換機もハードウェアとOSは同一
(スパコンはハードウェアとOSをセットで開発しないと、ハードウェアを作ったとは言わない)
特にHaskellを扱うようなソフトウェア科学から言えば同一と言わなければならない
理由はハードウェアを抽象化したモノがOSだから

ゲート回路だけでOS全部を構築しててもC言語でOS全部を書いていても、プログラムからは一切区別できない
区別できないってことは同じということ

144 :デフォルトの名無しさん:2012/04/16(月) 22:36:02.49
意味わかんない。日本語でおk、レベル。

たとえばforkシステムコールをどうやって論理回路で実装するのか、論文が一本でもあったら示してくれ。

145 :デフォルトの名無しさん:2012/04/16(月) 22:42:55.75
>>144
相手にしちゃダメ

146 :デフォルトの名無しさん:2012/04/16(月) 22:46:57.64
>>144
論理回路でチューリングマシンを実装すればいいじゃん

147 :デフォルトの名無しさん:2012/04/16(月) 22:52:33.55
forkってメモリコピーするだけじゃん

148 :デフォルトの名無しさん:2012/04/16(月) 23:00:17.85
>>144 >>146
USBメモリと同等のモノはFFとNANDゲートだけで構成できる
USBメモリの中にOSを入れることができる
つまり論理回路しかなくてもOSは構成できる

149 :デフォルトの名無しさん:2012/04/16(月) 23:06:10.28
紙と鉛筆でも構成できそうだな

150 :デフォルトの名無しさん:2012/04/16(月) 23:12:15.14
>>148
OS → Haskellの言語処理系

USBメモリと同等のモノはFFとNANDゲートだけで構成できる
USBメモリの中にHaskllの言語処理系を入れることができる
つまり論理回路しかなくてもHaskllは構成できる

>>150 相手しちゃダメっ

151 :デフォルトの名無しさん:2012/04/16(月) 23:13:33.35
なんやその矢印は
シミュレーション関係とかΣ代数ホモモルフィズムとかちゃんと意味かけやぼけー

152 :デフォルトの名無しさん:2012/04/16(月) 23:18:00.73
ニヤニヤ☆
その程度の頭で数学やってるんだw

153 :デフォルトの名無しさん:2012/04/16(月) 23:27:59.61
>>149
設計に従って手で鉛筆と紙を動かせば問題ない

>>150
Haskellを経由しないシステムコールを禁止すれば、HaskellプログラムかHaskellより高水準のプログラミング言語から見ればそのHaskell処理系がOSでありハードウェアということになる
つまりHaskellマシン

154 :デフォルトの名無しさん:2012/04/16(月) 23:28:52.93
>>148 アホか。どんなソフトウェアだろうがメモリに存在できるんだからハードウェアになっちまうだろうが。
スーパーコンピュータに限らず、あらゆるコンピュータのあらゆるソフトウェアが。

スーパコンピュータのOSが特別、というのがお前の主張だったよな。

> DOS/V機やUNIXを使っていると分かりずらいが
とお前は言っている。それをちゃんと説明しろ。できなければ回線切って吊るか消えろ。

155 :デフォルトの名無しさん:2012/04/16(月) 23:33:31.56
おれはスレチ全員が回線切って吊るか消えてほしい

156 :デフォルトの名無しさん:2012/04/18(水) 22:13:15.53
>>154
DOS/V機やUNIXはOSのうちソフトウェアの可換性の高い部分が多く、ユーザがさわって移植している部分こそがOSだと勘違いしているから、DOS/V機やUNIXを使っていると「OSがハードウェアと同一だと」分かりずらい

新しいスパコンを開発するときには、OSに他のハードとの可換性がないため、OSとハードウェアは完全に同一
「新しいスパコンを開発した」とは「新しいOSを開発した」と同意語で、この認識は世間一般でも認められている
筐体の中のLSIに一切変更を加えなくても、OSの改良で「新しいスパコンを開発した」とニュースになる

ソフトウェアは抽象度によってハードウェアから独立するので、あらゆるコンピュータのあらゆるソフトウェアをハードウェアとは呼ぶのは正しくない
プログラムの電子データのビット列とそれを格納してる機構はハードウェアだが、プログラムのセマンティクスはハードウェアではない
ただひとつ例外があって、OSというプログラムはそのセマンティクスがハードウェア

157 :デフォルトの名無しさん:2012/04/18(水) 22:26:59.45
>>156
スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
Linix、AIX、UNIXはソフトウエアである。
したがって、スパコンのOSはソフトウェアである。

この問題についての詳しい議論は、こちらのスレ↓が適している。
http://toro.2ch.net/test/read.cgi/tech/1331930031/

158 :デフォルトの名無しさん:2012/04/18(水) 22:39:40.50
>>157
スペルミス。LinixはLinuxの誤記。ちなみに京にはLinuxが移植された。

159 :デフォルトの名無しさん:2012/04/18(水) 22:42:45.46
>>157
スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
スパコンのOSはハードウェアである。
したがって、スパコン以外のUNIX系OSもハードウェアである。

160 :デフォルトの名無しさん:2012/04/18(水) 22:47:24.63
>>158
京はノードに少し改良したLinuxを入れてて、京そのもののOSは移植じゃなくて改良

161 :デフォルトの名無しさん:2012/04/18(水) 22:55:14.12
>>159
> スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
↓この間に飛躍がある。
>スパコンのOSはハードウェアである。←根拠を省いた断定。

162 :デフォルトの名無しさん:2012/04/18(水) 23:08:22.98
>>161
別の言い方をしましょう
「例えば、HaskellでプログラミングしてるときのOSって何?」
「Haskellでプログラミングしてるとハイパーキューブとかのハードウェア構造が消えるけど、ハードウェアは何に吸収されたの?」

163 :デフォルトの名無しさん:2012/04/18(水) 23:14:00.03
>>119が元凶か。IDないと面倒だね

164 :デフォルトの名無しさん:2012/04/18(水) 23:15:54.30
>>162
それこそ初心者スレへどうぞだよ(OS,UNIX板あたりも含めて)。
もう少しコンピュータのいろはを勉強するか、あるいは無知の知に気がついた方がよい。
ヒント
・言語処理系から見たOSはライブラリの下でsystem callとして呼び出され機能している。
・OSは(というか通信ミドル)はトポロジーを特に隠さない。
 むしろトポロジーを意識して並列分散したほうが性能がでる。
 Haskellがトポロジーを露わに扱う術を持っていないだけである。

165 :デフォルトの名無しさん:2012/04/19(木) 00:45:36.21
ヒント、とか言って得意げに語りだす奴w

166 :デフォルトの名無しさん:2012/04/19(木) 00:50:20.71
何の根拠もないのに
「スパコンのOSはハードウェアである。」
とかトンデモな断言をするより遙かにましだろ。

「UNIX系OSもハードウェアである。」
に至っては、初心者スレではなく、もはや病院行けとしか言いようがない。
恥ずかしすぎるので人前では決して言わないように。

167 :デフォルトの名無しさん:2012/04/19(木) 01:33:45.40
っ鏡

168 : ◆QZaw55cn4c :2012/04/19(木) 02:29:21.51
ふつうのhaskellを読んでいます。
ghc 7.2.1 以降は
import System
とすると、

could nod find module 'System'
It is a member o the hidden package 'haskell98-2.0.0.0'
use -v to see a list of the files searched for.

とでてコンパイルできません
ghc 7.0.4 ではコンパイルできます。
7.2.1 以降でコンパイルできるようにするにはどうしたらいいでしょうか?
環境はWindows7 です。
http://ideone.com/ToAyj

169 :デフォルトの名無しさん:2012/04/19(木) 02:46:32.16
import System.Environment
にすればおk

170 :デフォルトの名無しさん:2012/04/19(木) 20:50:07.23
>>164
System call がハードウェアとの接触点ということでしょう
ということは、rawSystem から向こうは全部ハードウェアです

仮に、Haskellプログラムがプログラム上の言明でトポロジーにアクセスできてどのノードのどのLSIのどのメモリのどのビットを1にするか指定していたら、そのプログラムはOSです

171 :デフォルトの名無しさん:2012/04/19(木) 21:04:49.64
>>166
・コンピュータ科学では、「どのコンピュータの」OSもハードウェアと「原理的に」同一
・一般のコンピュータ科学を知らない人たちは、スパコン業界のハードウェアとOSを同一視している

分からなければ、次の話を考えればいい

今パソコンの中に10cmくらいの512MBのメモリが入っている
この世から、プログラムを高水準のモノから次々の削除していく
一度削除したら、そのプログラムと同じことができるモノは永遠にこの世に出てこない

これを続けていくと、OSが削除されたときに512MBのメモリはハードウェアではなくなり、ただの石になる

もっと言うと、川べりに落ちてるただの石も、その石を動かすシステムがあって、Haskellプログラムからそのシステムにアクセスできて計算に利用できれば、そのシステムはOSであり、そのOSと石はハードウェアになる

172 :デフォルトの名無しさん:2012/04/19(木) 21:22:33.36
喩えの方が余計わかりにくい

173 :デフォルトの名無しさん:2012/04/19(木) 21:59:04.77
独自用語とたとえで持論を語り出す電波さん。
持ちネタはそんなにないから、しばらくすれば満足して黙る

174 :デフォルトの名無しさん:2012/04/19(木) 22:06:58.32
もっとわかりやすく言うと、例えば論文読んでてプログラムからハードウェアへの入力x(t)があったとき、これそのままOSへの入力
例外はOSの論文読んでるときだけ

175 :デフォルトの名無しさん:2012/04/20(金) 00:43:47.39
>>171
この世にこれほど頭の悪い人を見たことがない。

176 :デフォルトの名無しさん:2012/04/20(金) 02:42:48.57
>>171
すれ違い迷惑です。退場してください

177 :デフォルトの名無しさん:2012/04/20(金) 13:03:38.27
Haskellの話しようぜ。そういえば来月 Learn You Haskell ... の日本語訳出るんだよね。

178 :デフォルトの名無しさん:2012/04/20(金) 16:23:19.18
せっかくだから
http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell
どうよ?

179 :デフォルトの名無しさん:2012/04/21(土) 22:14:24.35
parallel と concurrent がごっちゃになってる気がしないでもない

180 :デフォルトの名無しさん:2012/04/22(日) 07:57:37.73
ふむ
ttp://www.haskell.org/ghc/docs/latest/html/users_guide/lang-parallel.html

181 :デフォルトの名無しさん:2012/04/22(日) 08:05:10.57
並列と並行の定義は微妙に意見分かれるよね

182 :デフォルトの名無しさん:2012/04/22(日) 11:52:22.81
>>178は最初から最後までparallelの話じゃね?

183 :デフォルトの名無しさん:2012/04/22(日) 11:55:45.93
data parallelだから当然だな。

184 :デフォルトの名無しさん:2012/04/24(火) 23:23:42.89
Yampa でのゲーム作りは論文を参考にしてだいたい分りました
(論文のインベーダーを改造したり、ブロック崩しを作ったりしました)

一方、同じく FRP ライブラリの Reactive の方では、
どのようにゲームを作るのか

具体的には、個々のキャラを毎フレーム独立に動かしながら、
かつ互いに(衝突などで)関連を持つようにするには、
どのようなフレームワークを考えれば良いのか
生成や消滅はどのように考えるのか

参考になりそうな文献や記事は無いでしょうか

自分では、イベントとシンクの考え方がユニークで面白いので、
これをゲームオブジェクト間の関連に使えないかと考えているのですが、
他の人はどのように考えているのか、参考にしたいです

185 :デフォルトの名無しさん:2012/04/25(水) 01:23:27.55
Reactiveはもうメンテされてなくて、今のGHCじゃコンパイルできないから俺はノータッチだけど、
Yampaは、Reactiveなんかの古典FRPを写像変換子のアローとして再構築したライブラリだから、基本的なところの考え方に違いはないはず。

というか、生成、消滅、衝突とかをどう考えたらいいかわからないってのは、FRPの基本的な考えを理解してないからじゃないか?

時間に応じて離散的に変化する値を[(Time, a)]という無限リストだと捉えるのがイベント
時間に応じて連続的に変化する値をTime -> aという型の連続関数だと捉えるのがビヘイビア

こいつらに対して、
定刻tを過ぎたらイベントを発する atTime :: Time -> Event a
ビヘイビアを積分する integral :: Behavior a -> Behavior a
イベントが発生したタイミングで、ビヘイビアの値を補足した新しいイベント作る snapshot :: Behavior a -> Event b -> Event (a, b)

みたいなコンビネータを使ってごにょごにょするのがFRP。

例えば、キャラの移動速度の変化をビヘイビアとして定義して、integralで積分すれば、それが各時刻におけるキャラの位置のビヘイビアになる。
衝突、生成、消滅、キャラのステータス状態の変化、キー入力なんかは、イベントとして考えられるし、
毎フレームの更新自体もイベントとして考えられて、各キャラの更新は

map (flip snapshot updateEvent) charactor

みたいに書けば、それが各フレームのキャラの状態変化を表すイベントになる。
こんな感じで、イベントとビヘイビアを組み合わせて、より複雑なイベントやビヘイビアを作ってく。

とりあえず、Haskell wikiからたどれるリンクを片っ端から読みあさるのが良いと思う。
http://www.haskell.org/haskellwiki/Functional_Reactive_Programming
http://www.haskell.org/haskellwiki/Reactive

本だとSOEが有名。
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/

186 :デフォルトの名無しさん:2012/04/25(水) 02:00:46.52
ちなみに、Yampaはイベントも矩形波みたいな時刻tの関数だと捉えて、
全てTime -> aという連続関数として考えるのが基本的なアイディア。
イベントやビヘイビアの合成は、

SF a b = (Time -> a) -> (Time -> b)

という写像変換として定義して、その枠組みにアローを使ったと。

古典FRPの概要と欠点とか、AFRPが何を改善したのかとかは
http://www.haskell.org/haskellwiki/Yampa
から辿れる、ITU-FRP2010 のスライドで説明されてるから見とくと良いと思う。

187 :デフォルトの名無しさん:2012/04/25(水) 04:37:14.33
Haskell的な処理の仕方がどうにも見につかない
実際に使われてるコード読みまくるか

188 :デフォルトの名無しさん:2012/04/25(水) 19:19:28.33
>>185
Yampa でゲームを作る場合、
pSwitch 系の関数を中心にイベント周りを組み立てるのが一般的ですよね
(論文 The Yampa Arcade や、これを引用してる他の論文などでも基本的にそうなってます)

まず、現在発生しているゲームオブジェクトを全てまとめたコレクションを作っておく

その上で、たとえば pSwitch 関数や dpSwitch 関数を使うのでしたら、
各ゲームオブジェクトや外部入力を起源とするイベント(衝突やビーム発射)を
発生させる関数を第1引数に渡す

コレクションの初期値を第2引数に渡す

第1引数の関数で発生したイベントを、コレクション内のゲームオブジェクトを
生成したり消滅させるイベントに変換する関数を第3引数に渡す

第3引数の関数で発生したイベントを解釈して
実際にコレクションを修正する関数を第4引数に渡す

細かいことはとりあえず抜きにして、大まかにはこんな感じだと思います
こうやって作った pSwith 関数や dpSwitch 関数の戻り値であるシグナル関数に、
ゲームを回すのに必要なシグナルを毎フレーム送るようにする

非常に分りやすく、イベントの伝達がスッキリして、
Yampa はかなり良い基盤を提供してくれると思っているのですが、
こういった基盤は Reactive の方ではどのようになっているのか聞きたいです

Reactive では Yampa みたいなイベント周りの仕組みを一ヶ所に集中させるのとは
また違った方法をとっているのでしょうか


189 :184:2012/04/25(水) 19:22:23.08
>>188
すいません、>>185 が Reactive についてはノータッチなのは分ってますが、
とりあえずどこかへアンカーを付けないと、後から話の流れが追いにくいと思いまして

190 :デフォルトの名無しさん:2012/04/27(金) 11:55:44.48
まだインクリメンタルGC実装されてないのかよ

191 :デフォルトの名無しさん:2012/04/27(金) 12:00:24.86
2000年以前に提案があったのにいまだに出来ないというのは実質無理ということなのだろうな
Non-stop Haskell(笑)

192 :デフォルトの名無しさん:2012/04/27(金) 12:01:31.38
Real Time Haskell

193 :デフォルトの名無しさん:2012/04/27(金) 12:15:26.39
メモ化による効率化の方法がわからない。。。
λカ娘(二期)を読んだらメモ化には Control.Monad.Memo (cabal install monad-memo)を使うといいよ的な
事が書いてあったのでHackageあたりの文書をチラ見してるけどフィボナッチ数列のメモ化だけの例じゃ
理解できない。。。

Hackageの文書みると「モナディックフォームに変換」とかさらりと書いてるので、もしかしてこれを使える
ようになるためにはモナドがちゃんとわかってないといけないんでしょうかね。

Control.Monad.Memoが使える程度のモナド理解のためのオススメ文書などあったらどなたか教えて
頂けないでしょうか。

194 :デフォルトの名無しさん:2012/04/27(金) 17:31:00.49
データをグラフにするのにニュープロットとカイロ
どっちのバインディングライブラリが幸せになれるかな
ドザです

195 :デフォルトの名無しさん:2012/04/27(金) 18:02:32.57
>>193
fib n = fib (n-1) + fib (n-2)

のところを

fib n = let
 n1 = fib (n -1)
 n2 = fib (n - 2)
 in (n1 + n2)

と書いて、モナド形式に変換した〜と言ってる2番目の例と比較してみればわかるんじゃないかな。
do が let、<-が=、returnが(大体)inに対応していると思って。
(これは他のどのモナドでも同じ。do文はモナドによって特殊な振る舞いを組み込む事の出来るlet式。
MonadFixのインスタンスにしてDoRec言語拡張でrecキーワードを有効にしないと再帰束縛はできんけど。)

関数を呼び出す際に、1引数関数(k -> Memo k v)と、値kを取る、memoって関数を介して呼び出すと、kに対する計算結果をメモ化してくれる。
これは、適用演算子($) :: (k -> v) -> k -> vにメモ化機能付けたもの、と考えてもおkだと思う。

異なる関数で相互再帰したりする場合はそれぞれ違うメモモナドを使わないとダメっぽいので、モナド変換子を理解してないとちょっとむずいかも。

196 :デフォルトの名無しさん:2012/04/27(金) 19:22:43.33
>>190
いまどれぐらいストップザワールドするんだろう?

197 :デフォルトの名無しさん:2012/04/27(金) 21:15:42.26
>>177
これ、Amazonに登録されてました

198 :デフォルトの名無しさん:2012/04/27(金) 21:28:53.03
評判の良い本だから楽しみだな
欲を言えば連休中に読みたかった

199 :デフォルトの名無しさん:2012/04/27(金) 22:33:02.95
>>197
そういう時はURLもお願いします。
ところで同時チェック商品が「情報処理2012年05月号別刷」です。
Haskellユーザは情報科学に興味がある人が多いのですね。

すごいHaskellたのしく学ぼう! (2012/5/23発売)
http://www.amazon.co.jp/dp/4274068854

情報処理2012年05月号別刷
「《特集》CGMの現在と未来: 初音ミク,ニコニコ動画,ピアプロの切り拓いた世界」
http://www.amazon.co.jp/dp/4915256839

え?初音ミクとニコニコ動画特集?
プレミアム会員の私が言うのも何ですが、
Haskellとはユーザ層が被らないとばかり思ってました。

200 :デフォルトの名無しさん:2012/04/27(金) 23:02:51.55
これがステマというやつか

201 :デフォルトの名無しさん:2012/04/27(金) 23:13:54.70
まったく。なにがURLもお願いしますだよw

202 :デフォルトの名無しさん:2012/04/27(金) 23:19:57.80
>>200
ステルスに失礼だろ

203 :199:2012/04/27(金) 23:44:34.50
URLも日本語版のタイトルも書いてないから探すのに無駄に手間取りました。
>>199をステマと思った人は自分の判断力がその程度だと自覚してください。

204 :デフォルトの名無しさん:2012/04/28(土) 00:26:50.05
Learn You Haskellでググったら一発、
ていうかこのスレにいるような層で原著知らないやついるんだなあ
自分のアンテナが低レベルだと自覚してください

205 :デフォルトの名無しさん:2012/04/28(土) 01:15:00.48
前スレ736に日本語版タイトルが出ているのを思い出せなかった>>199はアンテナが低レベル。
日本語版を探している人が原著を知らないと判断した>>204は判断力が低レベル。

ということで、以後何もなかったかのようにどうぞ。

206 :デフォルトの名無しさん:2012/04/28(土) 01:15:22.02
>>203
>>203
>>203

207 :デフォルトの名無しさん:2012/04/28(土) 01:54:56.47
>>205
いやだからさ、「Learn You Haskell 翻訳」 とかでググったら
日本語版のタイトル出てくるよってことなんだが…
そこまで言わんと分からんかね

208 :デフォルトの名無しさん:2012/04/28(土) 02:09:15.28
原著知ってれば尼で適当に検索すれば表紙ですぐ分かる

209 :デフォルトの名無しさん:2012/04/28(土) 02:15:34.87
ttp://learnyouahaskell.com/chapters
ApplicativeとかMonoidの話もあるのか、買いだな

210 :デフォルトの名無しさん:2012/04/28(土) 06:33:10.05
あー、なんかごめん

211 :デフォルトの名無しさん:2012/04/28(土) 07:34:34.99
いいってことよ

212 :デフォルトの名無しさん:2012/04/28(土) 20:07:01.35
GADT

これって、なんて発音するの?
カフェテラスで議論する時に困る

213 :デフォルトの名無しさん:2012/04/28(土) 20:12:31.04
じーえいでぃーてぃー 以外の発音は聞いたことがない

214 :デフォルトの名無しさん:2012/04/28(土) 20:29:16.32
そっか

HTML がハトマルだから、GADT も何かあるのかと思ってた

ありがと

215 :デフォルトの名無しさん:2012/04/28(土) 21:12:57.68
>HTML がハトマルだから
いやいや

216 :デフォルトの名無しさん:2012/04/28(土) 21:41:36.82
ハテマラだろwwwwwwwwwwww

217 :デフォルトの名無しさん:2012/04/28(土) 23:08:53.77
GenericなADTだからじーえーでぃーてぃーが自然な発音だろうけど、俺は最初ガッドって読んじゃってこの発音が離れない。

218 :デフォルトの名無しさん:2012/04/28(土) 23:36:16.79
ガドト派はいないの?

219 :デフォルトの名無しさん:2012/04/28(土) 23:44:01.61
俺もpwdコマンドがプリントワーキングディレクトリだけど
パウドゥって脳内で響くのが治まらない
プワディって呼ぼうかな

220 :デフォルトの名無しさん:2012/04/29(日) 00:27:16.78
言語拡張オプション名が GADTs だから GADT もいっしょにガッツって読んでる

221 :デフォルトの名無しさん:2012/04/29(日) 02:34:16.91
>>195
ありがとうございます。モナドをもう少し真面目に勉強してみます。

222 :デフォルトの名無しさん:2012/04/29(日) 10:54:07.47
>>217
> GenericなADTだからじーえーでぃーてぃーが自然な発音だろうけど、俺は最初ガッドって読んじゃってこの発音が離れない。

私もこれ

223 :デフォルトの名無しさん:2012/04/29(日) 12:25:33.10
リワハで勉強していくとモナドトランスフォーマ辺りで脳が軋む
この書籍、後半部分に誤植が多発してるね

224 :デフォルトの名無しさん:2012/04/29(日) 12:40:02.36
リワハwww

225 :デフォルトの名無しさん:2012/04/29(日) 12:53:35.88
>>223
モナド変換子はマジむずい。
あれは理屈を理解するよりも、コンパイルして怒られてを繰り返して体で覚えた方がはやいかもしれない。
まずはliftIOだけ使って、コードのどの部分がどんな型になってんのか把握できるようになるまでガンバレ。

226 :デフォルトの名無しさん:2012/04/29(日) 14:07:50.00
さぁ次はmonad-controlの攻略だ・・・

227 :デフォルトの名無しさん:2012/04/29(日) 14:22:11.84
それよりも Arrow のやさしい解説本を洋書でも良いから誰か書いてくれよ

ところで、Arrow の利用って FRP かパーサーくらいしかないの?

228 :デフォルトの名無しさん:2012/04/29(日) 14:46:37.22
Arrowよか最近はconduitやら何やらのComonad系のやり方の方が熱いと聞いた
しかしComonadはArrowよかさらに文献が少ないと言うw

229 :デフォルトの名無しさん:2012/04/29(日) 15:41:09.55
>>227
Arrowの導入は「関数プログラミングの楽しみ」に1章分だけど出てる
印象としては抽象度が高すぎてかえって使いづらい
始めからArrowとして設計されてたら、もっと使い勝手がよかったと思う

230 :デフォルトの名無しさん:2012/04/29(日) 16:03:42.43
>>229
うん、持ってる

> 抽象度が高すぎて
まさにこれ、やさしいとは言いがたい

ネット上の解説も、回路図で first とか right とか説明して、
最後にこれが大ボスと言わんばかりに loop をちょろっと解説して終わりなのが多い
しかも、どれも抽象的

なんかこう、実例みたいなのが無いんだよなぁ

ひとつ論文で、パーサーの例を挙げて、
こうすればスペースリークを防げるよねって解説があったけど、
あれがまだましな方だったな(論文の方が分りやすいってどうよと思うが)

231 :デフォルトの名無しさん:2012/04/29(日) 16:57:45.72
(>>=)って左結合なのにどうして左の方で束縛した値が右の方で使えるの?

     __
((((((((((束縛)  )  )  )参照)  )  )  )  )  )

スコープ的にどうなってんの?


右結合だったら自然に見える事は理解できるんだが
      _______________________
(  (  (束縛(  (  (  (  (  (参照(´・ω・`))))))))))

232 :デフォルトの名無しさん:2012/04/29(日) 17:10:59.47
>>231
モナド則でこうなってるから
(m >>= f) >>= g == m >>= (\x -> f x >>= g)

233 :デフォルトの名無しさん:2012/04/29(日) 17:21:25.38
>>231
(>>=)は左結合だけどdoは右結合だから問題ない
明示的に(>>=)とラムダを使う場合でも、
a >>= \x ->
b >>= \y ->
c
なら、
a >>= (\x ->
b >>= (\y ->
c))
のことだから、やはり問題ない(ラムダ式は可能な限り右まで続く)

>>232
モナド則は関係ない

234 :デフォルトの名無しさん:2012/04/29(日) 18:17:44.38
>>233
……infixl 1と宣言しておきながら、事実上は右結合なんですか?

右結合って短絡可能なんですよね?

Maybeモナドでは
左にNothingなら問答無用でNothing
ってなってるけど

処理が右結合で、途中Nothingに出逢ったら
Real World Haskellではそのまま最後までNothing伝播処理が続くって書いてあった

でも僕の考える限りでは、右結合では右側が判明するまでの必要最低限の努力をするのが遅延評価だから
途中でNothingに出逢った瞬間からスタック巻き戻しのようになると思うのですが……


/\
 /\
  /\
  N /\
    /\
      :
      /\
       /\
/\
 /\
   N
/\
  N

Nothing

235 :デフォルトの名無しさん:2012/04/29(日) 19:24:55.15
>>234
構文の話と意味の話をごっちゃにしてないか
左結合(infixl)というのは、あくまで
a >>= b >>= c
というふうに使ったときに
(a >>= b) >>= c
と解釈される、というだけの意味。それ以外の使い方をした場合には関係ない

後半はその通りで、(Nothing>>=f)はfを呼ばないから、たとえばdoの中でNothing
が出て来たらそれ以降は評価すらしない
そのNothingが別のdo(呼び出し元の関数とか)に渡ったときには
Nothingの伝播処理が挟まる

236 :デフォルトの名無しさん:2012/04/29(日) 21:27:11.79
>>235
質問@
 Maybe 上で (>>=) あるいは (>>) を使ってたくさんの計算を連鎖するとき、
その計算のどれかが Nothing を返したら、残りの計算は一切評価されません。
 しかしこの連鎖は完全には短絡されていないことに注目しましょう。
連鎖中のそれぞれの (>>=) や (>>) は左の Nothing にマッチすると右に Nothing を生成し、
最後までそうしていきます。この点は忘れやすいものです。
連鎖中の計算が失敗したとき、それに続くNothing 値の生成、連鎖、消費は実行時に安価ではありますが、タダというわけではありません。


348 P にこう書いてありますが、私にはこの文脈が左結合を示唆しているかのように見受けられます。つまりは、
  /\
 /\
/\
N
 /\
/\
N

/\
N

Nothing
こう主張しているように思えるのです。短絡は起きていないように思えます。

ここで私のいう短絡とは、関数処理のスキップのみならず木構造の一発切除をも意味します
Nothingに出逢った瞬間全てを忘れて即Nothingです

これは無理なのでしょうか?

237 :デフォルトの名無しさん:2012/04/29(日) 21:31:47.75
>>235
質問A
余談ですが考えてもみれば、左結合は(関数処理は省けても)そのまま最後まで構造が進むしか無いようで、
一方で右結合は構造も短絡できるかのように見えますが、
構造の最後の方でNothingが発生するか、結局最後まで発生しなかった場合を想像すると、
スタック巻き戻しを考慮に入れると、行って戻ることになり、
最後まで構造をなぞるどころかその2倍弱の手間になるかも知れませんね。

より最初の方でNothingが出る期待が高い時は右結合
そうでない時は安定的な左結合が適切なんでしょうか?

Data.List.and と or は右結合で定義されていますが
これは何を意識してのことでしょうか?

and/orの最後の方でFalse/Trueがでるか、あるいは最後まで出ない時、
(これは直感ですが)リストの半分を越えてから結論出せる状況になったら、
正格左結合よりも酷いパフォーマンスになるのではないでしょうか?

スタックを巻き戻すだけというのが、パターンマッチングで値を返す処理に比べて、
凄く速いのならそんな事は無いといえるのでしょうが。

238 :デフォルトの名無しさん:2012/04/29(日) 22:32:05.06
木構造だとか関数処理とか怪しい概念は窓から放り投げて定義の展開と代入、簡約で考えよう
その辺はRWHよかIntroduction to Functional Programming using Haskellの方が詳しいyp

andやorが右結合なのは無限リスト食わせるとわかる
foldlで定義したら食わせるリストの頭に零因子であるものがあってもスタック食いつぶす

Maybeに関しての短絡はNothing >> forever (Just 1)とかするとわかる
これが木構造とやらを切除しないとなるとサイズが無限である木がメモリ上に存在してスタックオーバーフロー起こす事になる

239 :デフォルトの名無しさん:2012/04/29(日) 23:59:04.07
初心者に信用されてないんだなあHaskell

240 :デフォルトの名無しさん:2012/04/30(月) 03:31:17.36
手持ちの情報だけで突っ走ってしまう人がいるのはHaskellに限った話ではない

241 :デフォルトの名無しさん:2012/04/30(月) 09:20:17.79
>>239
「信用」の意味がよく分らないです

Haskell は初心者から、本来あるべきどのような信用がないのでしょうか

242 :デフォルトの名無しさん:2012/04/30(月) 09:55:23.07
>>214
くっそこんなので笑わされるとは

243 :デフォルトの名無しさん:2012/04/30(月) 10:03:34.53
鳩丸

244 :デフォルトの名無しさん:2012/04/30(月) 11:13:59.36
暗黙の型変換の仕組みは Haskell では作れないのでしょうか(GHC の拡張機能なとで)

例えばリテラルからの暗黙の型変換は一部ありますよね
Num.fromInteger 関数とか IsString.fromString 関数を定義しておけば、
リテラル整数や文字列を適切な型にコンパイラが自動的に変換してくれる
(後者は GHC の拡張機能ですが)

これの延長で、例えば OpenGL を使っていて、
GLdouble 型を引数に取る関数を Double 型に適用しようとした時、
何か特別な定義をしておけば、realToFrac 関数を使わずとも、
コンパイラが自動的に変換してくれるとか

このような例だけでなく、一般的に fromIntegral 関数とか realToFrac 関数って、
けっこう目障りなんですよね

これらって、型推論出来るようにコードを書かなければならないという、
どちらかと言うと言語仕様よりの概念じゃないですか
そのわりに、realToFrac 関数だけでは、ぱっと見、何から何への変換か分らない

一方で、これらの関数が使われているコードは、
何を計算するのかという、もっと抽象度の高い概念をコード化しているわけで

抽象度の高いコードの中に、抽象度の低い「おまじない」の様なコードが
けっこう大きな石ころのように混ざっている状況が、なんとも違和感を覚える

どうにかならないものでしょうか

245 :デフォルトの名無しさん:2012/04/30(月) 11:26:54.17
>>241
うーん、言語の設計者より自分の方が頭いいかもしんない、と思われちゃってるところ。

246 :デフォルトの名無しさん:2012/04/30(月) 11:45:17.37
どうでもいいレスに反応して戦線を拡大したがるあたり
抽象度とか言いつつ全体が見えていない

247 :デフォルトの名無しさん:2012/04/30(月) 11:57:23.83
>>238
有難うございました(´;ω;)

248 :デフォルトの名無しさん:2012/04/30(月) 14:53:15.43
GHCiで入力に関して、重複する履歴は考慮しないようにするにはどうしますか?
上を押しても同じ履歴だった場合、動いてないように見えてストレスとなります

249 :デフォルトの名無しさん:2012/04/30(月) 15:06:17.22
>>248
残念ながら現状ではどうにもならない

なにかストレスを発散する方法を考えてくれ

250 :デフォルトの名無しさん:2012/04/30(月) 15:30:36.77
サンクスエニウェイ

251 :デフォルトの名無しさん:2012/04/30(月) 18:34:46.96
haskelineを直してパッチ送ればいいんじゃね

252 :デフォルトの名無しさん:2012/04/30(月) 18:36:44.31
むしろこのスレの初心者の扱いの酷さに引いた

253 :デフォルトの名無しさん:2012/04/30(月) 18:38:36.11
定番の頭の悪い攻撃ですな

254 :デフォルトの名無しさん:2012/04/30(月) 23:24:32.16
初心者質問スレはまだ不要?

255 :デフォルトの名無しさん:2012/04/30(月) 23:33:00.05
今まで初心者らしい素朴な質問を見たことがない

・どうやってボタン表示するんですか
・ループが出来ません
・変数変えれないんですけど

そんな質問しねーよ、って人ならもう初心者じゃない

具体的に「Haskellでやりたいこと」を見つけて取り組んでくれ
分かんないことがあったらピンポイントで質問してこい
あたしらが優しく相手してやる

256 :デフォルトの名無しさん:2012/05/01(火) 00:09:38.80
HappyのGLR機能が保守放棄されている(現行のghcで動かない。バグもあるらしい)のですが、
今生きているHaskellのGLRパーサはありませんか?

257 :デフォルトの名無しさん:2012/05/01(火) 03:16:34.46
>>255
お、お前……女だったのか……。

258 :デフォルトの名無しさん:2012/05/01(火) 03:22:27.79
Haskellでメタプログラミングしたいんですけど,
具体的には今あるコード資産に対してコード変換して,機能拡張したい,
そのための便利な仕組みない

259 :デフォルトの名無しさん:2012/05/01(火) 04:32:54.50
>>252
いんや?
自分が初心者の頃、親切に教えてもらったぞ?

プログラミングHaskellで最初に詰まって、散々悩んだreplicateのリスト内包表記版を作れって問題とか

初心者でも、replicateの再起版はすぐに思いついたんだが、この頃は本当に頭が固かったな・・・
(ヒントがlengthのリスト内包表記版の応用って書かれてても、全然思い浮かばんかった)

回答してもらって、ああ、なるほど、lengthのリスト内包表記版の応用だ。ってやっと納得できたっけ

そもそもHaskellはRubyとかと違って、組込み関数も自分で簡単に作れるってのが初心者の頃の自分には言語の理解の助けになった
普段自分の使ってる関数の動きを自分で同じ関数作って確認しながら覚えられるから、あんまり基本的過ぎる質問ってする必要が無かったし、
>>255同様、初心者らしい質問って、そもそもHaskell(または関数型言語)ってどんな言語?とか以外じゃ見ない(それも最初のスレだけだったような・・・)
当時の自分の質問が一番初心者らしい質問だったと思う


260 :デフォルトの名無しさん:2012/05/01(火) 06:00:09.93
[(x,y) | x <- [1..], y <- [1..], 3^x - 2^y == 1]

深さ優先探索なので,(1,1)の後は事実上フリーズします

これを深さも幅も均衡して広げて探索していくにはどうしますか?

261 :デフォルトの名無しさん:2012/05/01(火) 06:38:12.34
>>260
[(x,y) | x <- [1..], y <- [1..x], 3^x - 2^y == 1 ||  3^y - 2^x == 1]

262 :デフォルトの名無しさん:2012/05/01(火) 08:47:38.24
>>259
昔のことは知ってるよ。Part3くらいから居る
>>231を馬鹿にする流れを見て、正気か?と思っただけ

263 :デフォルトの名無しさん:2012/05/01(火) 09:44:02.40
馬鹿にしてるってどの辺が?

264 :デフォルトの名無しさん:2012/05/01(火) 15:45:08.13
>>261
面白いハックです
ありがとうございました

265 :デフォルトの名無しさん:2012/05/02(水) 16:26:57.40
無限モナドリストを受けて
条件を満たす最初の要素を束縛するにはどうしますか?

266 :デフォルトの名無しさん:2012/05/02(水) 17:20:16.04
モナドリストって何?
[a] ?
Monad m => m [a] ?
Monad m => [m a] ?

基本はData.List.find (:: (a -> Bool) -> [a] -> Maybe a)と同じで、型に合わせてliftMしたりすればいいと思うよ。
ただ無限リストなので、条件を満たす要素がなかったら計算が終わらない。
これはしょうがない。

267 :デフォルトの名無しさん:2012/05/02(水) 21:56:17.29
>>266
後者です

findでやってみようと思ったんですが
術語が Int -> IO Bool なんです

filterM みたいに findM があればいいと思いますが

filterMしてheadって不格好です
きっとスマートな解決法がある筈です

268 :デフォルトの名無しさん:2012/05/02(水) 22:03:05.12
ああそれからモナドの性質上
無限のモナドのリストを渡すとフリーズしますよね

最初、遅延評価なのになんで正格評価みたいになってんだと首を傾げたのですが
考えてもみれば、順序を保証するんだからfilterMに無限のモナドのリストを渡すと
そのリストの最後の評価が済むまで次の行けないですよね
困りました

269 :デフォルトの名無しさん:2012/05/02(水) 22:20:28.35
>=> 地味に便利ワロタ

270 :デフォルトの名無しさん:2012/05/02(水) 22:54:51.28
[IO a] じゃなくて IO [a] で [a] が無限リストなら
どうもならん、諦めろ

271 :デフォルトの名無しさん:2012/05/02(水) 23:45:26.55
[IO a]で無限です

272 :デフォルトの名無しさん:2012/05/03(木) 00:06:04.51
Data.Listでの実装は
find p = listToMaybe . filter p
だぞ。別に filterM して head も似たようなもんじゃないか?

[IO a]でもIO [a]でも無限リストで要素が無ければ止まらないのは
一緒だと思う。

273 :デフォルトの名無しさん:2012/05/03(木) 00:27:44.81
>>272
はい(´・ω・`)

274 :デフォルトの名無しさん:2012/05/03(木) 00:29:59.11
filterM して head ってのはこれ?
これは要素があっても[IO a]が無限リストなら停止しないよ

findM' :: Monad m => (c -> m Bool) -> [m c] -> m c
findM' f = head <=< filterM (join . liftM f)


一方、こっちは要素があれば止まる(無ければ止まらない)

findM :: Monad m => (a -> m Bool) -> [m a] -> m (Maybe a)
findM f [] = return Nothing
findM f (x:xs) = do
  v <- x
  t <- f v
  if t then return $ Just v else findM f xs


テストしてみれば分かる

ms :: [IO Int]
ms = map return [1..]

main = do
  --print =<< findM' (return . (> 10)) ms
  print =<< findM (return . (> 10)) ms

275 :デフォルトの名無しさん:2012/05/03(木) 05:20:09.91
ほんとですね
無限リストでfilterMは危険なのか。

276 :デフォルトの名無しさん:2012/05/03(木) 06:33:35.38
>>274
ありがとうございました

filterMに倣って
findM :: Monad m => (a -> m Bool) -> [a] -> m (Maybe a)
版を作って使ってみましたが、何だかソースが汚れた気がします

Maybeを取扱う為に一々letやcaseを挿入しないとならなくなったせいでしょうね

しょうがないでしょうが

ところで何故標準ライブラリに採択されてないのでしょうか

277 :デフォルトの名無しさん:2012/05/03(木) 06:38:59.61
>>276
無限リストに使うなら、停止するとき返り値は
必ずJust xなんだからfromJustで取り出せば?

278 :デフォルトの名無しさん:2012/05/03(木) 06:46:35.74
join . liftM :: (r -> r) -> r -> r

これ何の使い道あるんですか?

279 :デフォルトの名無しさん:2012/05/03(木) 06:57:09.58
>>277
そうでした。。。

コードが汚くなったのは別の改変のせいでした
勘違いして findM 導入のせいにしてました

280 :デフォルトの名無しさん:2012/05/03(木) 07:10:28.79
>>278
なんの意味もない
liftM使って……て書き込み見たんでliftMから書き始めたからそうなった
今は反省している

281 :デフォルトの名無しさん:2012/05/03(木) 07:26:28.96
Oh...

282 :デフォルトの名無しさん:2012/05/03(木) 10:41:16.52
join . liftM p は p :: a -> m Bool を m a -> m b にするのに必要だけど、(>>= p) でも同じ。

283 :デフォルトの名無しさん:2012/05/03(木) 11:17:28.41
せっかくの話の流れをぶった切って申し訳ないですが、質問します。

正格性フラグの付いたデータ型のことですが、

data X = X !Int
・・・
let x = X a

この場合、x の値が実際に必要になるかどうかに関わらず、
X a の a が評価されるという意味でしょうか。

もうひとつ、

data F = F !(Int -> Int)
・・・
let f = F g

この場合、g が評価されたというのは、どういう状態を指すのでしょうか。
と言うのも、関数ではない値なら弱頭部正規形になるまで評価され、
それがどういった形なのか頭の中にイメージ出来るのですが、
関数の評価という意味がいまひとつイメージ出来ません。

もしかして、g w = if v then 関数1 else 関数2 などと場合分けされていた場合に、
f = F g の時点でこの v まで評価されて関数1か関数2かが決定されるということであり、
単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない、
ということでしょうか。

284 :デフォルトの名無しさん:2012/05/04(金) 01:11:25.25
>>283
どちらの質問もその考え方であってる。


ただ、わかってるかもしれないけど、

>単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない

束縛された値が正規形なのかとか、リテラルかどうかとか判断する術は一般にないから、
それらを基に正格性フラグ付けることに、意味がある、ないを判断することはできないし、意味もないよ。

重要なのは、値なりデータ構造なりがどこで構築されて、どこで正規化された値が必要になるのか?


285 :デフォルトの名無しさん:2012/05/04(金) 01:24:42.23
Haskellの道は長く険しい

286 :デフォルトの名無しさん:2012/05/04(金) 05:16:54.30
なら、やめれば?
言語は道具なんだから、習得に時間や労力が必要なら
その言語は道具として劣っているんだよ。

287 :デフォルトの名無しさん:2012/05/04(金) 05:52:35.82
つまり習得に時間がかかる日本語や英語は猿のうなり声より劣っていると

288 :デフォルトの名無しさん:2012/05/04(金) 06:47:05.76
>>283
> この場合、x の値が実際に必要になるかどうかに関わらず、
> X a の a が評価されるという意味でしょうか。
いや、xの値が必要になるまでは評価されない。

> もしかして、g w = if v then 関数1 else 関数2 などと場合分けされていた場合に、
> f = F g の時点でこの v まで評価されて関数1か関数2かが決定されるということであり、
同上。

> 単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない、
> ということでしょうか。
これはそのとおり。

289 :デフォルトの名無しさん:2012/05/05(土) 03:45:27.77
forM [1..9] print
1
2
:
9
[(),(),(),(),(),(),(),(),()]

この最後のゴミを排除するには
>> return ()
をバインドするのが正統ですか?

290 :デフォルトの名無しさん:2012/05/05(土) 03:47:18.16
forM_

291 :デフォルトの名無しさん:2012/05/05(土) 07:28:01.11
あざっす^^

292 :デフォルトの名無しさん:2012/05/05(土) 13:36:55.17
>>286
C++を窓から放り投げるスレじゃないから

293 :デフォルトの名無しさん:2012/05/05(土) 22:21:06.18
もしかして、main の中で一行でも IO がつくコードを書いたら、それ以降は絶対に IO は取れないのでしょうか?

294 :283:2012/05/05(土) 23:04:46.88
お二人とも、ありがとうございます。

・・・結局、data X = X !Int の正規化フラグを付けるのと付けないのとで、
何が変わるのでしょうか?

data X = X !Int
・・・
let x = X a

>>284
> どちらの質問もその考え方であってる。

>>288
> いや、xの値が必要になるまでは評価されない。

どちらが正解なんですか。
それとも、お二方も同じ事を言っているのでしょうか。

a の評価のタイミングはいつなんでしょう?


>>284
> 束縛された値が正規形なのかとか、リテラルかどうかとか判断する術は一般にないから、
> それらを基に正格性フラグ付けることに、意味がある、ないを判断することはできないし、意味もないよ。

たしかに。
いや、ライブラリのソースを読んでいて、正規化フラグ付きの関数を持ったデータ型があって、
どういう意図・狙いでフラグを付けたのかなと思いました。

295 :デフォルトの名無しさん:2012/05/06(日) 02:26:01.72
>>293
main に限らず何かの関数の中で IO を使う関数を利用すれば、その関数の型の出力の部分には絶対に IO が付くという意味なら、 IO は取れない
例外は Debug

もしかして、なにか方法あるのかな?


296 :デフォルトの名無しさん:2012/05/06(日) 06:18:40.65
>>294
trace付けて確認すればいいやん。

import Debug.Trace

data X = X !Int
data Y = Y Int

main = do
 let x = X (trace "X" 1)
 let y = Y (trace "Y" 2)
 print 3
 print $ seq x 4
 print $ seq y 5

297 :デフォルトの名無しさん:2012/05/06(日) 11:10:33.37
UnicodeSyntax きもいわー
Scala でもこういうの流行ってるようだし

298 :デフォルトの名無しさん:2012/05/06(日) 11:19:04.33
さぁその気持ちでAgdaのコードを読もうか

299 :デフォルトの名無しさん:2012/05/06(日) 12:16:00.88
新人が全角スペースを埋め込んでも怒られない時代

300 :デフォルトの名無しさん:2012/05/06(日) 12:17:22.58
>>295
一応、標準ライブラリ内に System.IO.Unsafe.unsafePerformIO :: IO a -> a 関数がある

が、これは Simon Marlow と Simon Peyton-Jones の2人以外使ってはいけない

301 :デフォルトの名無しさん:2012/05/06(日) 15:11:42.01
unsafePerformIO ……それは禁断の果実

302 :デフォルトの名無しさん:2012/05/08(火) 22:24:51.66
尼のレビュー見てる限りだと、日本語で出てる入門書では
Graham Hutton著・山本和彦訳の「プログラミングHaskell」がいいっぽいけど、実際どうなの?

303 :デフォルトの名無しさん:2012/05/08(火) 22:27:58.33
実際そう
対抗馬になりそうなのが今月出る「すごいHaskellたのしく学ぼう」

304 :デフォルトの名無しさん:2012/05/08(火) 22:32:20.78
ゆっくり勉強する時間があるなら、いきなりRWHでいいと思う

305 :デフォルトの名無しさん:2012/05/09(水) 00:22:24.17
プログラミングHaskellは8章以降が魔窟

306 :デフォルトの名無しさん:2012/05/09(水) 00:38:56.55
魔窟ってほどではないけどあそこから難易度がすこーんと上がるのは確か
ゾウさん本にはその辺期待してる

307 :デフォルトの名無しさん:2012/05/09(水) 00:52:04.11
じっくりやるならAlgebra of ProgrammingとかPurely Functional Data Structureみたいな応用の効く(範囲が広すぎて実はあまり役に立たない)内容をですね

308 :デフォルトの名無しさん:2012/05/09(水) 01:06:20.12
ゾウ本だとHadoopと紛らわしいから愛称が欲しいな
寿司本?


309 :デフォルトの名無しさん:2012/05/09(水) 01:12:32.86
スゴイ級

310 :デフォルトの名無しさん:2012/05/09(水) 01:19:18.62
スシボンって書くとセシボンみたいで原題と繋がっていい感じだな
いやなんとなく

311 :デフォルトの名無しさん:2012/05/09(水) 01:22:38.35
難しいことを簡単に書くのは無理。

312 :デフォルトの名無しさん:2012/05/09(水) 03:25:04.44
すごハスは11章からが面白い

313 :デフォルトの名無しさん:2012/05/09(水) 07:14:00.90
すごハスって、基本的にネットで無料で読める原著と内容はほぼ同じ?
それとも、大幅に加筆されてる?

314 :デフォルトの名無しさん:2012/05/09(水) 08:22:56.77
Real World Haskell P.209に、

fnmatch :: (RegexLike Regex source1) => String -> source1 -> Bool

というのがあります。

ここの(RegexLike Regex source1)というクラス制約にある、A B a という形は
どのようなクラス宣言をすれば、このような形になるのでしょうか?

315 :デフォルトの名無しさん:2012/05/09(水) 11:56:14.66
ソース読んでみそ。
ttp://hackage.haskell.org/packages/archive/regex-base/latest/doc/html/src/Text-Regex-Base-RegexLike.html

多変数型クラスを宣言するにはMultiParamTypeClassesというLANGUAGEプラグマが必要。
ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#idp24691328
また、多変数型クラスを含む型推論のために、多くの場合、関数従属または関連型が使われる。
ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#functional-dependencies
ttp://www.kotha.net/ghcguide_ja/latest/type-families.html#assoc-decl

316 :デフォルトの名無しさん:2012/05/09(水) 11:57:01.10
ソース読んでみそ。
ttp://hackage.haskell.org/packages/archive/regex-base/latest/doc/html/src/Text-Regex-Base-RegexLike.html

多変数型クラスを宣言するにはMultiParamTypeClassesというLANGUAGEプラグマが必要。
ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#idp24691328
また、多変数型クラスを含む型推論のために、多くの場合、関数従属または関連型が使われる。
ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#functional-dependencies
ttp://www.kotha.net/ghcguide_ja/latest/type-families.html#assoc-decl

317 :デフォルトの名無しさん:2012/05/09(水) 11:59:11.96
しまった。ダブりすまん。
ついでに訂正しておくと、多変数型クラスより多引数型クラスのほうが訳語として一般的みたいだ。

318 :デフォルトの名無しさん:2012/05/09(水) 12:45:02.58
>>315
d

何故か、hackage.haskell.orgにつながらなくてソースは見られないのですが、
MultiParamTypeClassesというLANGUAGEプラグマをつければ、class宣言に複数の変数を
取ることができるんですね。

319 :デフォルトの名無しさん:2012/05/11(金) 09:10:35.85
fact 0 = 1
fact n = n * fact (n - 1)
ふと思ったのですが、もし(階乗を知らない人が)負数を突っ込んだら死にますよね。
階乗は例えがアレですけどこういうケースのように、パターンマッチで任意の条件分岐(n < 0とか)できますか?

320 :デフォルトの名無しさん:2012/05/11(金) 09:16:44.54
直接パターンマッチではできない
if-then-else式を使って、やりたいことはできる、と思う

321 :デフォルトの名無しさん:2012/05/11(金) 09:17:54.53
あーあと、正しくない結果の時のエラーはundefinedという関数を呼ぶと、
エラーが起きる値が返るから、それを使えばいい

322 :デフォルトの名無しさん:2012/05/11(金) 09:36:25.12
if-then-elseよかguardの方がよく見る

323 :デフォルトの名無しさん:2012/05/11(金) 09:41:06.61
ありがとうございます。ガードの方が意味的に良さそうですね。

fact :: Int -> Int
fact (n)
  | (n < 0)  = undefined
  | (n == 0) = 1
  | (n >= 1) = n * fact (n - 1)

324 :デフォルトの名無しさん:2012/05/11(金) 10:17:08.88
見やすさではそんな感じかな。こだわる人だとこう書くかも
fact n =
 case n `compare` 0 of
  LT -> undefined
  EQ -> 1
  GT -> n * fact (n - 1)

325 :デフォルトの名無しさん:2012/05/11(金) 10:46:13.79
なるほどcaseならパターンの網羅性もチェックできる訳ですね。

326 :デフォルトの名無しさん:2012/05/11(金) 10:51:34.61
自分の好みではこう。パターンマッチの上から順に、特殊ケース→一般とする。
fact n | n<0 = undefined
fact 0 = 1
fact n = n * fact (n-1)

327 :デフォルトの名無しさん:2012/05/11(金) 10:51:35.52
ドメインを広げ過ぎると、また停止性が保証できない問題は出てくるだろうけども。

328 :デフォルトの名無しさん:2012/05/11(金) 11:11:11.43
tp://www.amazon.co.jp/gp/product/images/4274068854/ref=dp_image_z_0?ie=UTF8&n=465392&s=books

どうしてこうなった…w

329 :デフォルトの名無しさん:2012/05/11(金) 11:53:25.13
マイナスかどうかのチェックは最初だけでいい、とか言い出すとどうかな

330 :デフォルトの名無しさん:2012/05/11(金) 15:47:59.33
factSafe = check (>= 0) fact

check p f n = if p n then f n else undefined

fact 0 = 1
fact n = n * fact (n-1)


331 :デフォルトの名無しさん:2012/05/11(金) 16:13:00.23
わざわざドメイン定義するならMaybeで返そう

332 :デフォルトの名無しさん:2012/05/11(金) 16:36:37.12
check p f n = if p n then return (f n) else Nothing

ドメインて何?

333 :デフォルトの名無しさん:2012/05/11(金) 16:57:47.03
factSafe = 1 : zipWith (*) [1..] factSafe
fact n = factSafe !! n

334 :デフォルトの名無しさん:2012/05/11(金) 17:33:59.09
>>332
定義域
例えば浮動小数点や有理数を渡した時に、
コンパイルエラーも含めて健全な定義になっているかということを言っていると思う。

335 :デフォルトの名無しさん:2012/05/11(金) 17:39:05.80
fact = (map snd (iterate (succ . fst &&& uncurry (*)) (1, 1)) !!)


336 :デフォルトの名無しさん:2012/05/11(金) 17:59:32.33
>>333>>335
初心者の私に解説してplz

337 :デフォルトの名無しさん:2012/05/11(金) 20:24:45.91
>>334
それscanlでできるよ!
fact = (!! n) $ scanl (*) 1 [1..]

あと(!!)使ったらSafeじゃないだろ…

338 :337:2012/05/11(金) 20:25:54.90
すまん
>>333 宛だった。

339 :デフォルトの名無しさん:2012/05/11(金) 20:42:03.98
負数入れたらエラーになるけど停止はするな

340 :デフォルトの名無しさん:2012/05/11(金) 21:31:34.77
意味論の上ではどちらも⊥という扱い

341 :デフォルトの名無しさん:2012/05/11(金) 22:47:56.84
それにしても335は酷いポイントフリー症候群だな…。

342 :デフォルトの名無しさん:2012/05/11(金) 22:59:19.96
ポイントフリーは酷くないが(1,1)がマジックナンバーになってるのが気になる

343 :デフォルトの名無しさん:2012/05/11(金) 23:45:33.49
初心者レベルの質問かもしれませんが、
Haskellの組み込み関数と同等の機能を
練習のために実装してみると、組み込み
のものより桁違いに遅い事があります。
組み込みの方の実装を見るためには
どうしたらいいでしょうか?

344 :デフォルトの名無しさん:2012/05/12(土) 01:17:34.23
hsファイルをそのままインタプリタで実行して遅いなら、hiファイルにした後で実行してみてはどうか


345 :デフォルトの名無しさん:2012/05/12(土) 01:47:10.63
>>343
Hackageのリファレンスからソース落とせる。

baseパッケージなら↓の一番下
http://hackage.haskell.org/package/base-4.5.0.0

大抵は各関数の横にsourceってリンクが付いててHTML化されたソースを見ることができる。(全てのコードが辿れるとは限らないけど)

ただまぁ、融合変換とか正格性評価とかアンボックス型とか、かなり上級な内容もてんこ盛り。
他の言語でもそうだけど、基本ライブラリほど難しいっていう…。

346 :デフォルトの名無しさん:2012/05/12(土) 03:31:29.92
>>345
有難うございます!
http://hackage.haskell.org/packages/archive/pkg-list.html
パッケーリスト(↑)には何に使うのか想像もつかないもの(Conduitとか)が
沢山有りますね。
取り敢えず、ヤル気が持続しそうなもの(Animationなど)を見てみます。

347 :デフォルトの名無しさん:2012/05/12(土) 13:41:30.61
だれか顔文字だけで動くソースを書いてくれ。

348 :デフォルトの名無しさん:2012/05/12(土) 13:47:08.27
brainf*ck、Lazy-K亜種にしかならない

349 :デフォルトの名無しさん:2012/05/12(土) 19:38:57.18
みんな >=> は使ってるかい?

350 :デフォルトの名無しさん:2012/05/12(土) 19:40:08.85
くコ:彡

351 :デフォルトの名無しさん:2012/05/12(土) 22:43:14.15
haskell入れようとしたが、重すぎて繋がらない…
ttp://www.haskell.org/


352 :デフォルトの名無しさん:2012/05/13(日) 00:31:44.86
>>351
今は全く問題なく開くが・・・

まぁ、HaskellPlatform-2011.4.0.0-setup.exe のダウンロードは
確かに遅いと思うけど、繋がらないことはないだろ

haskell.org はたまにクソ重いときあるから、
時間をおいて何度か試してみなよ

353 :デフォルトの名無しさん:2012/05/13(日) 00:40:54.91
遅ければtorrent使えばいい

354 :デフォルトの名無しさん:2012/05/13(日) 00:50:09.29
exeファイルを落とせない場合は、セキュリティソフトがexeファイルのダウンロードを邪魔してる可能性あり


355 :351:2012/05/13(日) 01:03:27.63
アドバイスありがとう
ダウンロードどうこうというか、サイトに全く繋がらない状態が続いてる
サイトが落ちてるわけじゃないようなので、時間をおいて再試行してみる

356 :デフォルトの名無しさん:2012/05/13(日) 01:22:13.54
今現在、遅くもなんともありません。

357 :デフォルトの名無しさん:2012/05/13(日) 01:29:11.16
>>355
たしかに繋がらない
http://www.haskell.org/
↑を開くと、↓になる

Temporary Redirect
The document has moved here.
Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch Server at www.haskell.org Port 80

で、hereをクリックすると↓に飛ぶ
こっちはちゃんと見れる
http://www.haskell.org/haskellwiki/Haskell

ブラウザのセキュリティでリダイレクトを許可するか、haskellwiki を直接開けばいいと思う


358 :デフォルトの名無しさん:2012/05/13(日) 11:58:28.57
http://hackage.haskell.org/platform/
ここに移動したんじゃねぇの?

359 :351:2012/05/13(日) 20:13:03.61
解決した。ありがとう
しばらくこれで遊ぶわ

360 :デフォルトの名無しさん:2012/05/19(土) 04:49:47.87
>>328
http://ec2.images-amazon.com/images/I/513ipzNg22L._SS500_.jpg
スシやらタワーについて許可は取ったのだろうか

361 :デフォルトの名無しさん:2012/05/19(土) 07:56:41.29
どう許可が必要なんだ?

362 :デフォルトの名無しさん:2012/05/19(土) 13:27:18.60
オスケル 酢に溶かしたハスケル


363 :デフォルトの名無しさん:2012/05/19(土) 13:34:52.41
あンた、背中がHaskeてllぜ

364 :デフォルトの名無しさん:2012/05/19(土) 14:42:34.01
>>360
原作者にはウケてたらしいぞ

365 :デフォルトの名無しさん:2012/05/19(土) 19:04:09.46
>>364
ほんと?そういう話でもないかと思ってぐぐったんだけど見つからなくて
原書と日本語版のタイトルについての話なら見つかった
http://groups.google.com/group/haskell-cafe/browse_thread/thread/29274a7b6a4fddd4/45fbde1d2d1d0322

366 :デフォルトの名無しさん:2012/05/19(土) 19:06:45.10
Haskell全然関係ないけど旬のスカイツリーより東京タワーのが昭和感溢れててよかった気がする…。


367 :デフォルトの名無しさん:2012/05/19(土) 20:02:20.48
でも昭和時代はHaskellはまだ生まれてない

368 :デフォルトの名無しさん:2012/05/20(日) 00:44:00.62
Haskellはギリギリ昭和じゃなかったっけ?


369 :デフォルトの名無しさん:2012/05/20(日) 12:07:52.76
Haskell Report Version 1,0 は1990年の4月1日に発行された。
(1.0未満のバージョンは少なくとも公には無かったと思う)

A History of Haskell
http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/

ちなみに、それに先立ち、委員会で言語の名前をあれこれ考えるんだが、
Haskell に決まった後、旦那さんの名前を使っていいかと奥さんに訪ねに行くんだ。
その心遣いが暖かくて、上記pdfのこのくだりは結構好きだ。

370 :デフォルトの名無しさん:2012/05/20(日) 13:41:28.71
Mirandaは誰なの?

371 :デフォルトの名無しさん:2012/05/20(日) 13:51:57.71
スペインか何処かの著名な寿司職人じゃなかったっけ?

372 :デフォルトの名無しさん:2012/05/20(日) 14:23:19.93
天王星の衛星

373 :デフォルトの名無しさん:2012/05/20(日) 16:31:59.27
コカコーラ社のスプライトに対抗して出されたペプシ社の商品

374 :デフォルトの名無しさん:2012/05/21(月) 08:24:16.49
bsフジの番組で日本手ぬぐいだっけか作るのに
すかいつりーのデザイン使うのはダメとか言われたらしいよ

375 :デフォルトの名無しさん:2012/05/21(月) 08:34:21.97
デザインが商品の最も主要な一部だからでしょ。

376 :デフォルトの名無しさん:2012/05/21(月) 09:08:20.97
スーパードライホールみたいにとりあえず上にうんこでも載せとけばいいんじゃね?

377 :デフォルトの名無しさん:2012/05/21(月) 09:21:15.13
スカイツリーにはいいイメージ全然ないわ

378 :デフォルトの名無しさん:2012/05/22(火) 07:21:03.78
東京ハスカイケリー

379 :デフォルトの名無しさん:2012/05/22(火) 07:22:12.91
>>376
あのうんこビルすごいよな。でもトーキョー近辺に住んでる連中しか知らんのでは?
東京はすごいよな。
うんこビルに新宿の座薬ビル なんでもありだ

380 :デフォルトの名無しさん:2012/05/22(火) 08:24:28.93
何スレだよ

381 :デフォルトの名無しさん:2012/05/22(火) 10:19:44.11
では君達、議論に戻りたまえ

382 :デフォルトの名無しさん:2012/05/22(火) 11:08:16.00
ksks

383 :デフォルトの名無しさん:2012/05/22(火) 13:11:48.56
東京スカイツリー
東京使いすぎー

384 :デフォルトの名無しさん:2012/05/22(火) 13:22:52.22
だよなー
さいたまタワーの方がよかったよなー
土地まで用意したのによー

385 :デフォルトの名無しさん:2012/05/22(火) 17:01:44.09
最近Haskell勉強しようか、と自習中です。
Haskellでwindowsのcomを使う、具体的にはHaskellからExcelを
使いたいのですが、サンプル等はありませんか?

haskellscriptやhdirectは公式からもページが見れず、
com-1.2.3はインストールができてもあまりexcelを操作するような
サンプルが発見できませんでした。

386 :デフォルトの名無しさん:2012/05/22(火) 21:19:18.78
CSVをいじったり、VBAのコードを自動生成するくらいしかやったことない

387 :デフォルトの名無しさん:2012/05/22(火) 22:42:49.91
>>385
com パッケージの公式サンプル
http://haskell.forkio.com/com-examples
ここに WMI にアクセスするサンプルがある。
(完全なソースも zip になってる)

COM のインターフェースを取得する方法も、
そのメソッドを呼ぶ方法も、必要な情報はほぼ入ってないか?

COM の基礎が分っていれば簡単に Excel に応用できると思うんだが・・・

このサンプル見てピンとこないのなら、とりあえず Haskell は置いておいて、
VBスクリプトとかから COM にアクセスする方法を調べてみると良い。
COM に対するアクセスの要領はほとんど同じだと気づくはずだ。
(オートメーションを扱える言語なら何でも良いが VBS が一番イメージが近いと思う)

厳しいことを言うようで悪いが、Haskell に限らず、
自分がやりたいことをピンポイントで例示するサンプルなんてまず無いぞ。
サンプルを弄ったり、自分で極簡単なCOMを作ってアクセスしてみたりして、
少しずつ理解していくことを勧める(「勉強」をしているのならの話だが)。

388 :デフォルトの名無しさん:2012/05/23(水) 06:58:19.48
>>386 >>387
ありがとうございます。確かに、そのサンプル見てもよくわからず・・・
基本がなっていないみたいです。
まずはCOMの基本的な部分からゆっくり勉強していきます!

389 :デフォルトの名無しさん:2012/05/23(水) 13:49:05.42
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < Haskell Platform の stable release まだ〜?
            \_/⊂ ⊂_ )   \________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/


390 :デフォルトの名無しさん:2012/05/23(水) 22:08:37.74
あの絵本とりあえず発売したのか?

391 :デフォルトの名無しさん:2012/05/23(水) 22:13:49.97
え!絵本なん!?

392 :デフォルトの名無しさん:2012/05/23(水) 22:18:58.27
すごいH本、今日本屋行ったけど置いてなかったわ
これだから地方は

393 :デフォルトの名無しさん:2012/05/23(水) 22:22:22.73
iteratee に関するその周辺技術や考え方
メモ化に関するその周辺技術や考え方
FRP に関するその周辺技術や考え方
ジェネリックなデータ型や関数などの考え方
スペースリークに関するメカニズムや対策
Stream Fusion などを含む最適化の考え方や仕組み

というような辺りの話はなんで書籍にならないんだろ
どれでも、それ単体で本が書けてしまえるほど豊富な内容を含んでいるのに

394 :デフォルトの名無しさん:2012/05/23(水) 23:21:06.12
>>392
PDFでも販売してるよ
http://estore.ohmsha.co.jp/titles/978427406885P

395 :デフォルトの名無しさん:2012/05/24(木) 07:46:46.57
略しかたがすごいな
すごいH本。。。 巨乳や万筋だらけかと思うぞw

396 :デフォルトの名無しさん:2012/05/24(木) 07:51:57.42
プログラミングHaskell --> プロH
ふつうのHaskellプログラミング --> ふつうのH
Real World Haskell --> 実践H
入門Haskell --> 入門H

397 :デフォルトの名無しさん:2012/05/24(木) 08:01:07.46
むらむらしてきた
Little Schemerでも写経して心を鎮めるとしよう

398 :デフォルトの名無しさん:2012/05/24(木) 08:50:42.90
>>395
まあ、twitterのネタだからな

399 :デフォルトの名無しさん:2012/05/24(木) 12:39:35.57
無理して素人受け狙うのはみっともないと思う

400 :デフォルトの名無しさん:2012/05/24(木) 13:15:48.66
素人受けwww

401 :デフォルトの名無しさん:2012/05/24(木) 15:04:50.83
はじめてのC 並だよね。

402 :デフォルトの名無しさん:2012/05/24(木) 21:00:22.24
はじめてのC
みんなのPython
やさしいRuby
すごいHaskell ← new!




403 :デフォルトの名無しさん:2012/05/25(金) 07:02:59.99
なんの括りだ?

404 :デフォルトの名無しさん:2012/05/25(金) 07:53:50.13
みんなのパイソンとか物騒だろ

405 :デフォルトの名無しさん:2012/05/25(金) 07:56:30.09
で、内容はどうなのよ?
プログラミングHaskellかどっち買うのが正解?

406 :デフォルトの名無しさん:2012/05/25(金) 08:29:14.46
だれか出せよ
Oh!Python って本を。Oh!Xがあったんだから。

407 :デフォルトの名無しさん:2012/05/25(金) 08:29:58.56
Oops!Pythonでおっぱい本のほうがいいか

408 :デフォルトの名無しさん:2012/05/25(金) 08:35:30.56
https://github.com/lazyatom/kintama

>>405
Learn Youの原著は編集前のがWebで読める
プログラミングHaskellは薄くて簡潔で練習問題付き
お好みに合わせてどうぞ

409 :デフォルトの名無しさん:2012/05/25(金) 12:59:37.97
Haskell Platform 2012.1.0.0 マダー

410 :デフォルトの名無しさん:2012/05/25(金) 13:37:19.64
>>402
さつばつScala

411 :デフォルトの名無しさん:2012/05/25(金) 14:14:28.87
>>405
Learnは内容はいいけど、訳がどうかが問題。これだけは見てみないとわからない。
山本さんみたいに訳せてるかどうか

412 :デフォルトの名無しさん:2012/05/25(金) 14:57:09.79
Data.Vector.Primitiveはとても特殊な場合を除いて推奨されないとありますが
とても特殊な場合とはどんな場合なんでしょうか?

413 :デフォルトの名無しさん:2012/05/25(金) 18:04:21.99
配列ライブラリを書くときとか?

414 :デフォルトの名無しさん:2012/05/25(金) 18:10:07.54
将来、Vector の実装がPrimitiveのレベルで変更されるということだったら困る

415 :デフォルトの名無しさん:2012/05/25(金) 18:26:23.52
>>406
その筋の人だ!

416 :デフォルトの名無しさん:2012/05/25(金) 18:53:57.14
考えてみれば98糞食らえからwindows糞食らえで
 裏街道ばかり来てるな。

417 :デフォルトの名無しさん:2012/05/25(金) 19:32:56.19
>>405
>>411
元々のお二人の訳も素晴らしいのですが、さらにかなりレビューされていて
とてもわかりやすくて良いと思います。
ただ、原文のブロークンな調子を踏襲して訳されているので、
そういうのが嫌いな方には不向きかも知れません。
内容的には、すごいH本の方が、関数型言語の初心者には
分かりやすいと思います。

418 :デフォルトの名無しさん:2012/05/25(金) 19:41:28.34
cabalを利用していて、依存性が原因でパッケージのインストールに失敗する場合、通常どのように対処すればいいのでしょうか?
大まかで良いので教えていただけるとありがたいです

419 :デフォルトの名無しさん:2012/05/25(金) 19:50:41.63
普通の人は諦めて、バージョンアップするまで待つ。

普通でない人は、*.cabal ファイルをテキストエディタで修正する。

私は普通でない人なんで、どんどん書き換える。
もちろん異常が無いかどうかはできるだけ検証するが。

420 :デフォルトの名無しさん:2012/05/25(金) 22:05:05.22
すごいHaskell買おうかな……
フリー版+3000円の価値があるかが問題…

421 :デフォルトの名無しさん:2012/05/25(金) 22:22:11.53
>>420
もし主目的が、Haskell の関する他人の文章を楽しむことではなく、
あくまで Haskell を学ぶことであるまなら、
フリー版でよく分らない部分をここで訊いて、
それでも納得できなければ買う、というのはどうだろうか

422 :デフォルトの名無しさん:2012/05/25(金) 23:00:34.35
>>417
オーム社でやってるレビュー方式には参加したことがあるからだいたい雰囲気分かるわ。藁
訳は期待してるわ。by 411

423 :デフォルトの名無しさん:2012/05/25(金) 23:02:51.97
>>420
英語の洋書に一度は手を出したい→原著サイトでしばらく格闘してみる。
オンラインで読むのは嫌目がしょぼしょぼするし、頭に入るきがしない。英語は好き→原著でどうぞ
英語は苦手。→強烈なH本をどうぞ。

424 :デフォルトの名無しさん:2012/05/26(土) 18:43:17.15
紙のよりpdf版が少しやすい
http://estore.ohmsha.co.jp/titles/978427406885P

425 :デフォルトの名無しさん:2012/05/26(土) 22:19:42.13
しかもカラーらしいな、pdf版

426 :デフォルトの名無しさん:2012/05/26(土) 23:21:27.87
加筆とかはないのか、結局。

427 :デフォルトの名無しさん:2012/05/26(土) 23:46:47.63
「すごいHaskellたのしく学ぼう!」は気配りと楽しさがすごい
ttp://d.hatena.ne.jp/keigoi/20120526/sugoih

428 :デフォルトの名無しさん:2012/05/27(日) 15:53:38.46
Linuxで*.cabalってどこにあるんでしょう。
探せど探せど見つからなくて困ってます。

429 :デフォルトの名無しさん:2012/05/27(日) 16:04:40.54
>>428
意味が分らん。
cabal ファイルは Linux も Windows も関係ないだろ。

自分でパッケージを作りたいのなら cabal ファイルも自分で書くし、
Hackage から落としてきたパッケージなら展開したディレクトリ内に入ってる。

430 :デフォルトの名無しさん:2012/05/27(日) 18:58:41.69
>>428
ディストリのパッケージになってる奴の*.cabalファイルならソースパッケージを展開すると入ってると思います。

431 :418:2012/05/27(日) 20:08:53.91
>>419
ありがとうございます
しかしなかなか上手いこと通すのは難しいですね・・・

432 :デフォルトの名無しさん:2012/05/28(月) 02:19:34.53
.ghciを設定したら警告が出たんだが
*** WARNING: /home/hi/Haskell is writable by someone else, IGNORING!
*** WARNING: /home/hi/Haskell/.ghci is writable by someone else, IGNORING!

.ghci
:set prompt "ghci> "
設定も反映されないし、よくわからん。

433 :デフォルトの名無しさん:2012/05/28(月) 02:57:35.46
英語読めないのか?

434 :デフォルトの名無しさん:2012/05/28(月) 07:48:02.06
すごいHaskellのやつか。
ワーニングの英語には、これと似た内容が書いてある。
http://www.google.co.jp/search?hl=ja&q=.ssh+%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3
それでも分からなかったら、ワーニングの一部コピペしてググってみよう。

435 :デフォルトの名無しさん:2012/05/28(月) 11:53:23.62
ワーニングワーニングワーニングワーニング

436 :デフォルトの名無しさん:2012/05/28(月) 20:58:20.92
>>435
ボスキャラでも登場するのか

437 :デフォルトの名無しさん:2012/05/28(月) 21:11:31.73
ウォーニングって言いたいんだろ

438 :デフォルトの名無しさん:2012/05/28(月) 21:18:48.90
ワーニングのバッグスバニー

439 :デフォルトの名無しさん:2012/05/28(月) 21:20:36.83
>>435,436
へいおまち
http://www.youtube.com/watch?v=lySjinT6f0A#t=1m55s

440 :デフォルトの名無しさん:2012/05/28(月) 21:22:04.36
某書籍に「だったら、おまえはStar Warsをスターワーズと読むのか」とあって、
そりゃもっともだと思うと同時に、そういう話じゃねぇだろと思ったな。

441 :デフォルトの名無しさん:2012/05/28(月) 21:33:48.96
『宇宙戦艦ヤマト』が、「ワープ」を「ウォープ」に修正する最後の機会だったんじゃないか、
とか今では言われているが

442 :デフォルトの名無しさん:2012/05/28(月) 21:42:05.41
「ワープ」は1億人が意味を共有できる立派な日本語
修正の必要はない

443 :ぬるぽ:2012/05/28(月) 22:03:46.93
バレーボールもボレーボールらしいな
nativeの発音聞いたことないけど


444 :デフォルトの名無しさん:2012/05/28(月) 22:16:32.09
「グッドマーニング云々」とか言ってたヘミ猫を思い出す。

445 :デフォルトの名無しさん:2012/05/28(月) 22:28:44.29
ラウターの調子が悪い

446 :デフォルトの名無しさん:2012/05/28(月) 22:44:59.51
むかし、猫でもわかるプログラミングで、
エディットコントロールをエジットコントロールと言っていて、
もの凄く違和感を覚えた記憶がある。

でもよく考えてみれば、エジソンと同じなんだよな。

447 :デフォルトの名無しさん:2012/05/28(月) 22:46:22.72
>>443
アメリカ人は普通にバーリボーだったけどなぁ。

448 :デフォルトの名無しさん:2012/05/28(月) 23:34:37.10
♪こわれかけのレディオ

449 :デフォルトの名無しさん:2012/05/28(月) 23:38:13.93
gtk2hs や wx などの GUI ライブラリのラッパーを作りたい。
下記のことがラッパーでは実現不可能なら一から作ることになる。

例えば、ボタンを押すとラベルの文字が変わる処理を記述したい場合、
素の gtk2hs や wx なら、ボタンのイベントハンドラに登録した関数内で、
ラベルのプロパティに対して set 関数を使って値を書き換える感じだと思う。

これはあまりに手続き的でムカムカしてくる。

こうではなく、ボタンのイベントに反応するプロパティ型を作り、
それをラベルのプロパティに最初に設定した後は変更(再設定)しない。
イベントが起きなくても、起きても、自動的に文字が設定される。

プログラマはイベント時に何が起きるかを時系列にそって設定するのではなく、
プロパティが何に対してどう反応し、どう変化するかを定義する。

これができれば、いくぶん宣言的で心地よい。

私みたいな者が考える事なんて既にいろんな人が考えていると思うんだが、
このような仕組みを作る上で、参考になりそうな資料はないだろうか。

450 :デフォルトの名無しさん:2012/05/28(月) 23:48:03.50
wxPython と decorator

451 :デフォルトの名無しさん:2012/05/29(火) 08:41:21.13
まさにそれがFRP


452 :432:2012/05/29(火) 09:40:44.70
chmod 700 .ghci
chmod 700 Haskell/
で解決した。
Haskell/もパーミッションいじらないといけなかった。
なんで設定ファイルがない時は普通に動くのに、
設定ファイルを置くと警告が出るのか意味がわからない。


453 :デフォルトの名無しさん:2012/05/29(火) 09:44:25.92
俺は「***** is writable by someone else, IGNORING!」という警告を読むことが
できない文盲です、って大声で自分で言いふらして嬉しいのか?

454 :デフォルトの名無しさん:2012/05/29(火) 10:09:31.31
>>453
初心者でごめんね。

455 :デフォルトの名無しさん:2012/05/29(火) 10:15:28.14
いや初心者とかじゃなくて、英語読めればその警告が何故出たのかわかるだろってことだろ

456 :デフォルトの名無しさん:2012/05/29(火) 10:48:28.72
日本語でお説教する事に何のメリットがあるか、わかるだろ

457 :デフォルトの名無しさん:2012/05/29(火) 11:32:31.62
なでしこで記述する事に何のメリットがあるか、わかるだろ

458 :デフォルトの名無しさん:2012/05/29(火) 12:02:42.50
英語の初心者ということだろう。

459 :デフォルトの名無しさん:2012/05/29(火) 12:48:14.86
というか Unix は一つのマシンを複数のユーザーが使うことが前提だから、
初期化スクリプトみたいなファイルを誰でも編集可能だと、たとえば自分の
ファイルを全部消す、みたいな悪意ある記述を追加されるかもしれない、

という前提を知らないと、英語が読めてもわからないかもしれない。

ていうか >>434 を華麗にスルーしちゃダメだろ。

460 :デフォルトの名無しさん:2012/05/29(火) 12:52:44.84
>>450
まだ調べ始めたばかりだけど、求めているモノとは何となく違う感じがする。
decorator の機能を使ってイベント処理している例をいくつか見てみたけど、
結局イベントハンドラの中で描画関数を呼んだり、計算したりしている。

つまり、>>449 の「素の gtk2hs や wx なら」の部分と
本質的に何も変わらないのではないだろうか。

もちろん、自分でももう少し詳しく調べてはみるが。

>>451
言葉が足りず申し訳ない。
これが FRP の一つの形態になっている事は分ってた。
(リアクティブシステムの構築を関数型っぽく記述する事)

Haskell で使えるFRPライブラリにも色々あって、
たとえば Yampa の仕組みや実装をいくら調べたところで
>>499 のような事の実現に直接役立つわけではない(実際色々調べた)。

>>499 に繋がるような何かキーワードはないだろうか。

461 :デフォルトの名無しさん:2012/05/29(火) 15:16:16.96
バグ?
Prelude> succ 1.000022342
2.0000223420000003


462 :デフォルトの名無しさん:2012/05/29(火) 15:27:06.59
xamlのデータ・バインディングとか?

463 :デフォルトの名無しさん:2012/05/29(火) 15:36:37.09
XAMLファミリは、Bindingに加えてViewModelのプロパティ間で
リアクティブプログラミングする仕組みを導入すると
正に>>449のような書き方になるね。

しかし、あれをHaskellでどうやったら再現できるのかはさっぱりわからん。

やってる事は、依存関係のあるキャッシュの管理と似てるので
キャッシュを持つサーバの仕組みなんかが参考になりそうだが・・・

464 :デフォルトの名無しさん:2012/05/29(火) 16:02:10.76
>>460
色々調べてたのなら既知かもしれんが
プロパティを設定するというのはwxパッケージの提供するインタフェースに似てるな
このプロパティは実質IO aとa -> IO ()のペアにすぎんのだけど、それなりに>>449で述べてるようなのに近いように思う
これとFRPの組み合わせはreactive-banana-wxパッケージでプロパティやイベントをEventやBehaviorとして
リアクティブシステム内で扱えるような補助関数を提供してる
参考になる記事としてはreactive-bananaの作者のblogとか


465 :449, 460:2012/05/29(火) 19:46:57.92
みんな、ありがとう。
知ってるものも、知らなかったものも、色々キーワードが出てきた。
それぞれの関連も含めて調べてみる。

本棚の肥やしになってる "Pro WPF in C# 2008" もやっと役立つ日が来たかも。

アドバイスを受けて、Heinrich Apfelmus のブログをちょっと見てみたけど、かなり面白い。
まとまった時間が取れる休日にでも本格的に読んでみるよ。
(Conal Elliott のブログより読みやすい英語だ)

wx のプロパティは gtk2hs のそれや OpenGL の StateVar と似たようなモノで、
やはり「値」を設定したり取得したりするものという以上のモノではないのでは。
その値はあくまでそのプロパティの意味する値そのもので、
例えば text プロパティなら String 型しか受け付けない。
そこに「ユーザーが何かした時にはある文字になる」という IO String の値を
設定することはできない。

一応繰り返しておくと、次のような考え方が wx や gtk2hs などのものと思う。

ボタンが押されたイベントでは何を処理するのか?
 ・初めにラベルの文字を変え
 ・次にテキストボックスの背景色を変え
 ・最後にボタンを不活性にする

このような手続き的なものを、次のように宣言的にしたい。

ラベルの text プロパティとは何か?
 ・ボタンプッシュイベントで文字を変えるものだ
テキストボックスの bgclolor プロパティとは何か?
 ・ボタンプッシュイベントで色を変えるものだ
ボタンの enable プロパティとは何か?
 ・ボタンプッシュイベントで False になるものだ

466 :デフォルトの名無しさん:2012/05/29(火) 22:36:50.20
>>465
w :: Frame
b :: Button
t :: TextBox
l :: Label
pushEvent :: Button -> Event ()
text :: Prop w String
bgcolor :: Prop w Color
enable :: Prop w Bool

w <- frame [text := const "hoge", show := const () <$> createEvent w]
t <- textbox [bgcolor := changeColor <$> pushEvent b]
l <- label w [text := changeString <$> pushEvent b]
b <- button w [enable := const False <$> pushEvent b]

こういうのが思い浮かんだ

wxのプロパティやイベントの型をEventなりBahaviorの形式にしただけだが
>>465の最後の記述のような捉え方は自然に出来る書き方にはなってると思う
今のreactive-bananaでDoRecが使えるなら
頑張ってwx-coreパッケージ直接叩いてこういうインターフェースの高水準ライブラリ書くのは可能な筈


467 :デフォルトの名無しさん:2012/05/29(火) 22:42:05.22
部品単位でイベントハンドラを書きたいってこと?

468 :デフォルトの名無しさん:2012/05/29(火) 23:08:01.19
*Main> [1,3..6]
[1,3,5]
*Main> ['1','3'..'6']
"135"
*Main> [1.0,3.0..6.0]
[1.0,3.0,5.0,7.0]

なんでFloatのリストでやったときだけこうなるの?

469 :449, 460:2012/05/29(火) 23:21:17.86
>>466
text :: Prop w String

これらは Prop ではなく Attr なのでは?

それはともかく、具体的なアイデアありがとう。
イメージとしてはかなり近いと思う。
参考にして考えてみる。

470 :449, 460:2012/05/29(火) 23:22:12.75
>>467
それも一部に含まれているが、ちょっと違う。
手続き型と宣言型の違いが明確に現れるようにイベントハンドラを例にしたが、
あるプロパティの値が依存する先(ソース)はイベントハンドラだけではなく、
別のウィジェットのプロパティという可能性もある。

例えば、何か絵をプレビューするウィジェットの enable プロパティが、
複数のチェックボックスのプロパティに依存していたり。

この場合、手続き型なら、両方のチェックボックスの check プロパティを調べ、
両方 True ならプレビューウィジェットの enable プロパティを True にする、
という処理を両方のチェックボックスのイベントハンドラに記述する。
(当然実際は、同じひとつのイベントハンドラを両方に設定するなど省力化するが)

これを、例えば次のように記述できたら宣言的で分りやすいと思う。
(擬似的に wx っぽく書くと)

p <- image w [ enable := checked c1 <&> checked c2 ]

本質的には、イベントの発生やプロパティの変化を「伝搬」させたい。
それができれば部品単位でイベントハンドラを書くこともできる、という事。

471 :デフォルトの名無しさん:2012/05/29(火) 23:42:10.94
手続き型ならobserverパターンでやるんじゃないかな。

きっと難しくなる要因は純粋言語だというところにありそう。

472 :449, 460:2012/05/29(火) 23:52:06.14
>>471
すまん例が悪かったか。

べつに手続きっぽく書くのが難しい訳ではない。
observerパターンの様に書くこともできる。

私が単に関数型言語で手続きっぽく書くのをキモイと感じるから、
なんとか宣言的に書けないかと、そっちの方で苦心してるだけだ。

私がもし純粋でない OCaml にはまっていても、
きっと同じように宣言的に書けないか考えていたと思う。

473 :デフォルトの名無しさん:2012/05/30(水) 00:10:30.62
>>446
editはエディットです

474 :デフォルトの名無しさん:2012/05/30(水) 04:38:33.68
Stateモナドで24時間経っても答え出ない処理をMutable Vectorに替えたら20分で答え出したワロタwww

475 :デフォルトの名無しさん:2012/05/30(水) 05:55:52.99
(24 * 60) / 20 = 72
72倍の高速化ならよく聞く話。

476 :デフォルトの名無しさん:2012/05/30(水) 05:57:49.10
さっそくGTAでDPの練習 #Haskell - Qiita
http://qiita.com/items/a372458d171e373285b1
これとか当社比400倍とか

477 :デフォルトの名無しさん:2012/05/30(水) 07:00:18.28
(/ 20 (* 24 60))

478 :デフォルトの名無しさん:2012/05/30(水) 13:39:02.03
(/ (* 24 60) 20)でしょ

479 :デフォルトの名無しさん:2012/05/30(水) 14:15:16.61
くそう、みんな雲の上に居るようだ
DPが動的計画法のことだと知るまで5分も費やしてしまった
GTAに至ってはグランドセフトオート (ry

480 :デフォルトの名無しさん:2012/05/30(水) 14:28:51.43
すごいHaskell
たのしく学ぼう! ||
     人 _  |-|
     旦/○\日
     目 ァイリ |-|
  / ̄ ̄ ̄ ̄ ̄\  
  □-□ U      |
  | .|ι        |
旦ノノ||  ̄ ̄ ||



AAなんてあったのね

481 :デフォルトの名無しさん:2012/05/30(水) 15:27:23.39
>>480
さっき本屋で見てきたんだけど、B5大型本を想像していたので文庫本+αのサイズが意外だった。電車の中でも読めるね。
中身も読みやすく編集されているようで、これからHaskellやって見ようという人にはお勧めだと思う。

ステマでした

482 :デフォルトの名無しさん:2012/05/30(水) 16:13:11.04
これなら手続き脳の私でもらくらく最後まで読んでしまえそう!
でも...お高いんでしょう?

483 :デフォルトの名無しさん:2012/05/30(水) 16:19:47.25
Amazonで出店者が定価3、4割り増しにしてるけど、情弱は買うんだろうかあれ。

484 :デフォルトの名無しさん:2012/05/30(水) 17:21:21.37
少し高くしている奴は海外へ送ってもらえるってことでしょ?

あと今すごいH本第一章読み終わったけど
結構誤植があった。

485 :デフォルトの名無しさん:2012/05/30(水) 17:51:41.91
やっぱりか

486 :デフォルトの名無しさん:2012/05/30(水) 18:14:21.05
重力は存在しない といってる学者がいるみたいだな

やめとけよ
そこの場所のリファクタリング始めたら「引力」だって存在しねーし
熱エネルギーも存在しねーから

その部分は俺が研究してきた事と酷似する
俺はアルゴリズムの中から、変数を抹消し、
ソースコードは再帰で圧縮
そして残ったものは、何もなかった

1が残ると思ってたが、予想を超えて、「それ」は0になった

重力がいらないとかいっちゃうと、0に近づくんだよ
わかるか

いらなくないんだよ

元々、何もないところに「重力」ってものを「わざわざ」冗長させて定義したんだよ

何もわかってねーな科学者
リファクタリングし続けた後に、宇宙に存在する最後の1とは、時空のねじれによって出来る固体のみで
その時空のねじれを解けば1であった存在は0になり、文字通りなにもなくなる 世界の終わり

487 :デフォルトの名無しさん:2012/05/30(水) 18:16:30.43
コテが抜けてるよ

488 :デフォルトの名無しさん:2012/05/30(水) 18:35:37.43
躁病患った友人が似たような事言ってた

489 :デフォルトの名無しさん:2012/05/30(水) 19:26:23.54
ニュートラリーノがダークマターの正体なのか?

490 :デフォルトの名無しさん:2012/05/30(水) 20:12:32.98
beautiful codeであったな。
コードがなくなる話。

491 :449, 460:2012/05/30(水) 20:38:17.19
>>468
Float と Double の Enum インスタンスにおいて
enumFromThenTo 関数は次のように定義されている。

enumFromThenTo = numericEnumFromThenTo

numericEnumFromThenTo n n' m = takeWhile p (numericEnumFromThen n n')
  where
    p | n' >= n = (<= m + (n'-n)/2)   -- <-- 注目
      | otherwise = (>= m + (n'-n)/2)

numericEnumFromThen n m = iterate (+(m-n)) n

例えば [1.0,3.0..6.0] とやったら、6.0 以下の間は差分ずつ増やすのではなく、
「6.0 + 差分の半分」以下の間は差分ずつ増やす計算になってる。

つまり、7.0 以下の間は差分ずつ増やすので、最後は 6.0 ではなく 7.0 で終わる。

こういう仕様になっている理由は、本当のところは正直よく分らない。
一応理由として思いつくのは、浮動小数点による誤差の蓄積の問題を回避するため
ではないかという事。

492 :デフォルトの名無しさん:2012/05/30(水) 20:57:45.88
>>490
最後は唯の数式になるって話でしたよね
バグ0で何よりも高速に動作し使用メモリも0

493 :デフォルトの名無しさん:2012/05/30(水) 21:28:17.18
欧州ではコンピューターにプログラミングさせるのが今研究されてるとか
そんな話題があったな。

494 :デフォルトの名無しさん:2012/05/31(木) 01:03:20.68
(==) 1 1
1 == 1
上と下が同じなのは面白いなぁ。


495 :337:2012/05/31(木) 02:37:13.13
(1 ==) 1
(== 1) 1

全部同じ (^^)

496 :デフォルトの名無しさん:2012/05/31(木) 07:43:22.77
すごいH、全部読んだ。
誤植が多少あったけど、日本語訳に違和感はなかった。

PerlとJavaScriptで自サイトを作ってる趣味プログラマーだけど、プログラミングの幅を広げようと
思い、プログラミングHaskell -> Real World Haskellの半分までを読んでから、すごいHを読んだ。

後半は全くの初心者には、やっぱりちょっと難しいかなと思った。
これから、Real World Haskellの残り半分を読みます。

497 :デフォルトの名無しさん:2012/05/31(木) 08:34:14.43
違和感ないけど、
直訳のままじゃねーの?って所が所々あったよ。

498 :デフォルトの名無しさん:2012/05/31(木) 09:23:22.24
蛇足な上に正しいとは言い難い訳注が多くて萎えた

499 :デフォルトの名無しさん:2012/05/31(木) 11:03:03.47
誤訳誤植は具体的に書いてくれるとたすかるにゃん

500 :デフォルトの名無しさん:2012/05/31(木) 11:11:02.75
...とか言って具体的に自分も書かないとアレなので一つ見つけたやつ:


p.385 誤:VirePatterns  正:ViewPatterns

501 :デフォルトの名無しさん:2012/05/31(木) 12:12:22.41
p19の下側
両方を含むリストは作れません。

ここはタプルだろ?

502 :デフォルトの名無しさん:2012/05/31(木) 12:13:09.98
p20
最下段
ジッパーみたいに一つのリストにします。

ここはタプルだろ?

503 :デフォルトの名無しさん:2012/05/31(木) 12:15:22.87
p22
bが斜辺より長いような不要なトリプルを調べないような

ここはaだろ?

504 :デフォルトの名無しさん:2012/05/31(木) 12:21:40.86
ここに書いてもフィードバックされる保証はないけどな

505 :デフォルトの名無しさん:2012/05/31(木) 12:26:11.65
>>501
"…ペアとトリプル両方を含むリストは作れません。このため、
ベクトルを表すにはタプルを使ったほうがはるかに有利です。"

何もおかしいことは言ってないと思うよ。

p.19上の方では図形を表すのに頂点のリストとして図形を表す試みとして
[[Int]] なんかを考えようとしてる。つまりベクトルをリストとして与えようとしてる。
この方式について検討するとベクトルの表現に使われてるリストは長さ
固定ではないので2次元と3次元のベクトル(頂点データ)が混在したリストが
出来てしまうという難点があることが指摘されている。

一方、頂点の表現としてリストの代わりにタプルを使うならば標準のリストは
homogeneousでなければならないという縛りのおかげで2次元と3次元の
頂点データが混在したリストは作れない事になり、コンパイラがはねてくれる。
[(Int,Int)] か [(Int,Int,Int)]のどっちかになるはずだからな。

そんなわけで
"…ペアとトリプル両方を含むリストは作れません。このため、
ベクトルを表すにはタプルを使ったほうがはるかに有利です。"
という事になる。

506 :デフォルトの名無しさん:2012/05/31(木) 12:30:42.06
>>502
タプルのリストにしてくれるという意味で「一つのリストにしてくれます」と言ってると思うんだけど。

んーあれだな、本気でわからないのか些細な説明省略を鬼首で騒いでるのかわからん。
前者なら真面目に相手するけど後者ならあんま相手にしたくないなぁ。

後者ならSICPの日本語訳がクソすぎる和田は日本語がわかってない
とか該当スレで騒いでるほうが賛同者多くて楽しいと思うよ。

507 :デフォルトの名無しさん:2012/05/31(木) 12:36:10.34
> 後者ならSICPの日本語訳がクソすぎる和田は日本語がわかってない
> とか該当スレで騒いでるほうが賛同者多くて楽しいと思うよ。
YA・ME・TE
SICPスレが機能停止しっぱなしでげんなりしてるんだから

508 :デフォルトの名無しさん:2012/05/31(木) 12:46:06.63
諸君、ホットなライブラリは何かね?

509 :デフォルトの名無しさん:2012/05/31(木) 12:55:15.84
> 正しいとは言い難い訳注
むしろこっちの詳細はよ

510 :502:2012/05/31(木) 12:59:07.14
>>506
p21の
zipの使用例で作成されているのはタプルだから
一つのタプルにしますという意味のほうが
日本語として自然なのではないですか?

:t zip
zip :: [a] -> [b] -> [(a, b)]
と:tで見ると2つのリストを受け取って、返り値がタプルになってます。

表現方法で、
(a, b)はタプルで
[(a, b)]もタプルですよね。



511 :デフォルトの名無しさん:2012/05/31(木) 13:01:16.68
>>510
いやいや、(a, b)はタプルで[(a, b)]は 「タプルのリスト」だよ

512 :デフォルトの名無しさん:2012/05/31(木) 13:02:58.60
そもそもタプルとリストをひとつにして使っていますが、
>>タプルのリスト

p18のタプルの説明で
タプルにはリストと似ている点がいくつかありますが、
リストとタプルには根本的な違いがありますと。

別のものとして説明しているのに
なぜタプルのリストという言葉が出てくるのですか?


513 :デフォルトの名無しさん:2012/05/31(木) 13:05:27.09
p19の
先ほどのベクトル角括弧を丸括弧に変えて、
[(1,2),(8,11),(4,5)]
のようにすれば、タプルになります。
と書いてあります。


514 :デフォルトの名無しさん:2012/05/31(木) 13:07:02.52
本の訳が正しいのか、
>>511さんが正しいのか。
さてどっちだ?

515 :デフォルトの名無しさん:2012/05/31(木) 13:13:15.41
>>505
p19
この方法の問題点は、[[1,2],[8,11,5],[4,5]]のようなリストが作れて、
これを2次元ベクトルのリストが〜
を受けての

>>501
p19の下側
両方を含むリストは作れません。

と作れると書いてしまっては矛盾します。

GHCiで
Prelude> [[1,2],[8,11,5],[4,5]]
[[1,2],[8,11,5],[4,5]]

Prelude> [(1,2),(8,11,5),(4,5)]

<interactive>:137:8:
Couldn't match expected type `(t0, t1)'
with actual type `(t2, t3, t4)'
In the expression: (8, 11, 5)
In the expression: [(1, 2), (8, 11, 5), (4, 5)]
In an equation for `it': it = [(1, 2), (8, 11, 5), (4, 5)]
ghci>

リストだと通るが、
タプルだと作れません。


516 :デフォルトの名無しさん:2012/05/31(木) 13:14:45.79
ここのサイトは
書き込み毎にtwitter上に流れるような仕組みになっているよ。


517 :デフォルトの名無しさん:2012/05/31(木) 13:15:48.47
>>513
「ベクトルの角カッコを丸括弧に変えて」
 : つまりベクトルを表すときにリストを使うのではなくタプルを使うように変更して、という事です。

つまり「座標(ベクトル)のリスト」 のデータ型を [ [Int] ] から [ (Int, Int) ] に変更したわけです。

各種の言語で配列的なものを「ベクトル」と呼ぶ事がありますがこの箇所ではそのような
言葉使いはしていません。「ベクトル」は幾何的な座標を指した言葉です。

[Int] は 「整数のリスト」 ですね。
[ [Int] ] は 「「整数のリスト」のリスト」 です。

(Int, Int) は「サイズ2の整数タプル」 ですね。
そして [ (Int, Int) ] は 「「サイズ2の整数タプル」のリスト」 です。

518 :デフォルトの名無しさん:2012/05/31(木) 13:16:09.52
Functional 2ch (functional2ch) は Twitter を利用しています
https://twitter.com/#!/functional2ch



519 :デフォルトの名無しさん:2012/05/31(木) 13:18:37.00
原書19ページから引用
> We can change our vectors to tuples by surrounding them with parentheses
> instead of square brackets, like this: [(1,2),(8,11),(4,5)].

日本版の正確な引用文がないとなんとも言えないけど
訳すときに複数形がどっかに行ってしまったということじゃないか

520 :518:2012/05/31(木) 13:20:13.73
Hideyuki Tanaka ? @tanakh
PFIで働く社員。妹わんこ系Haskeller。今すぐフォローすべき競技プログラミング界のスーパーエンジニア。
ttp://tanakh.jp/ http://d.hatena.ne.jp/tanakh

Functional 2ch (functional2ch) は Twitter を利用しています
ttps://twitter.com/#!/functional2ch
のフォロワーにいるから、まず間違い無く見ているね。


521 :デフォルトの名無しさん:2012/05/31(木) 13:23:38.99
>>517さんが言いたいことは、
本の方は省略して書いていて、
タプルのリストと書くほうが正しいということかな?

本ではただのタプルだけど。

522 :デフォルトの名無しさん:2012/05/31(木) 13:29:04.34
[...] の中の各ベクタについて言ってるんだよ

523 :デフォルトの名無しさん:2012/05/31(木) 13:34:06.19
ある数以上フォローしてたら、TwitterのTLを全部チェックするなんて無理だから

524 :デフォルトの名無しさん:2012/05/31(木) 13:40:39.78
>>521
そういうことになりますかね。

紙の本の原文で見ると

We can change our vectors to tuples by surrounding them with parentheses
instead of square brackets, like this: [(1,2), (8,11),(4,5)].

となっているので

(拙訳)ベクトルの角括弧を丸括弧に変更してタプルに変えられます: [(1,2), (8,11),(4,5)].

ってな調子なので原文でも「ベクトル...」で始めた文脈のスコープがベクトルに維持されている
事を前提とした説明ですね。

525 :デフォルトの名無しさん:2012/05/31(木) 15:26:18.20
なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね

526 :デフォルトの名無しさん:2012/05/31(木) 15:53:45.08
ユーザーが増えると必然的にそうなる

527 :デフォルトの名無しさん:2012/05/31(木) 15:59:29.72
あちこちのスレで同じこと書いてる荒しだぞ

相手にするな

528 :デフォルトの名無しさん:2012/05/31(木) 16:16:11.40
Haskellの板ってここ以外あったっけ?w

529 :デフォルトの名無しさん:2012/05/31(木) 16:27:13.25
>>525
>>なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
感情丸出しで書き込んでいて、自分が一番食物連鎖の最下層にいるって気付かないのかな?

530 :デフォルトの名無しさん:2012/05/31(木) 17:30:12.27
>>528
Haskell以外の言語や他ジャンルのスレに無差別に投稿してるみたい。

531 :デフォルトの名無しさん:2012/05/31(木) 17:54:01.83
>>525
だったらHaskell初心者質問スレ立てろって日頃言ってるだろ
立てないなら黙って初心者の斜め上の発言の諫め役に甘んじてろや

532 :デフォルトの名無しさん:2012/05/31(木) 18:57:17.51
>>501,502はHaskell関係なしに読解力の問題だから
初心者スレなんていらんよ

533 :デフォルトの名無しさん:2012/05/31(木) 19:00:45.29
>>530
相手をしてくれるところに来るんだよな

534 :デフォルトの名無しさん:2012/05/31(木) 19:07:41.09
>>532
>>501,502が読解力の問題というのなら、
お前は本を買っていない貧乏人だろ。
本文を読めばおかしいと分かる。

535 :デフォルトの名無しさん:2012/05/31(木) 19:22:06.41
おかしくないよって丁寧に説明してくれてる人が既に現れてるだろ

ていうか・・・
自分の読解力は問題ない、きっと相手が本を買っていないに違いないって
すごい考え方をする人がいるんだな

536 :デフォルトの名無しさん:2012/05/31(木) 19:25:42.58
しかも貧乏人ときた
何かにつけて相手を貶さないと死んでしまう病気でも持ってるのだろうか

537 :デフォルトの名無しさん:2012/05/31(木) 19:38:40.60
>>513みたいにごく断片的に引用するとおかしいように見えるけど
それより前の文章を含めて読むと別におかしくないとわかるよ
>>524が文脈のスコープって言ってるのはそういうこと



538 :デフォルトの名無しさん:2012/05/31(木) 19:59:54.59
福沢諭吉が「天は人の上に人を作らず、人の下に人を作らず」
と言ったのを、スコープ無視して

だから結果を平等にしろと言い出す頓珍漢が定期的に生まれるらしい

539 :デフォルトの名無しさん:2012/05/31(木) 20:02:11.38
勝手な文脈をくっつけて我田引水する頓珍漢も定期的に見るけどなw

540 :デフォルトの名無しさん:2012/05/31(木) 20:02:57.16
またスコープがおそろし飛んだな

541 :デフォルトの名無しさん:2012/06/01(金) 10:01:04.38
>>538
日教組の悪口はそこまで。

542 :デフォルトの名無しさん:2012/06/01(金) 10:22:22.35
ν速に帰れ

543 :デフォルトの名無しさん:2012/06/01(金) 10:50:20.80
>>507
あんなパラノイアがここにもいると思うとゾッとするからな。

544 :デフォルトの名無しさん:2012/06/01(金) 17:51:34.23
>>537
該当箇所を引用してくれない?

545 :デフォルトの名無しさん:2012/06/01(金) 17:55:46.34
なんか盛り上がってると思ったら、なんだ読解力の問題じゃん

546 :デフォルトの名無しさん:2012/06/01(金) 18:04:30.79
原文よりも読解力が必要になるのは悪役だわな。

547 :デフォルトの名無しさん:2012/06/01(金) 19:21:51.64
Haskell の処理系が遅延評価を実現するための技術や歴史を
基礎的なことから学びたいのですが、どこから手を付けるのが良いでしょうか。
メモリ関係、特にガベージコレクタとの関係を主軸にして学びたいです。

"遅延評価" や "Haskell" "実装方法" "メモリ"
などの辺りのキーワードを色々組み合わせてググってみましたが、
学べそうなページは見つかりませんでした。
(他言語で遅延評価をエミュレートする方法は沢山ありました)

マイナーで1万超えるよな値が付いている洋書でも構いませんが、
なにか参考になりそうな資料はないでしょうか。

548 :デフォルトの名無しさん:2012/06/01(金) 20:11:52.60
>>546
普通に読んで分かること。読解力なんて言い出すまでも無いレベルだよ

549 :デフォルトの名無しさん:2012/06/01(金) 20:32:40.66
歴史的、基礎的というのがどこまで指すのかよくわからないけど、思いついたまま。

遅延評価が名前呼び出しほどはコスト高じゃないと世の中に知れたのが、LandinのSECDマシンを使ったLispKit Lispでの実装。
http://en.wikipedia.org/wiki/SECD_machine
http://en.wikipedia.org/wiki/Lispkit_Lisp
この辺はAlgolの名前呼び出しのための実装技術thunkが源泉の一つ。

グラフ簡約を使ったsimonpjの
"The Implementation of Functional Programming Languages"

遅延評価は扱ってないけど実装モデルの解説として素晴らしい。
http://www.cs.unm.edu/~williams/cs491/three-imp.pdf
(Schemeの実装モデル3つを解説しています。通称3imp)

抽象度の高いサブセットの実装として。haskell.orgにもいくつかある。
https://github.com/johang88/haskellinjavascript/blob/master/rapport/kapitel/abstract.tex

GCは手に入りやすい専門の本が二つあるのでそれを読めばいいと思う。実装上独立性が高いので、GCだけを独立して書いたものが多い。絡めて学ぶのはおすすめではない。

550 :デフォルトの名無しさん:2012/06/01(金) 20:50:49.50
>>546
原文を読むのに必要な読解力と変わらない程度に訳されてると思うのですが。

551 :デフォルトの名無しさん:2012/06/01(金) 21:02:13.19
本人乙!

552 :デフォルトの名無しさん:2012/06/02(土) 00:06:58.73
>>547
ガベージコレクションならこれ
徹底解剖「G1GC」 アルゴリズム編 - 達人出版会
ttp://tatsu-zine.com/books/g1gc



553 :デフォルトの名無しさん:2012/06/02(土) 00:08:28.86
本人は俺だ!

554 :デフォルトの名無しさん:2012/06/02(土) 00:15:49.03
諸君、議論したまえ

555 :デフォルトの名無しさん:2012/06/02(土) 00:40:22.16
>>500,501,502,503
このうちどれが間違いで、どれが勘違い?

556 :デフォルトの名無しさん:2012/06/02(土) 08:36:20.41
まぁ正直わざわざ買うまでもないものだ。

557 :デフォルトの名無しさん:2012/06/02(土) 08:47:27.61
ghciで日本語が数値に変換されるのですが、何が悪いのでしょう?
Prelude> zip [1..] ["りんご","みかん"]
[(1,"\12426\12435\12372"),(2,"\12415\12363\12435")]

ターミナル、LANGともにUTF-8。utf8-stringも入れて見ましたが変わりませんでした。
Mac Lion & ghc 7.0.3

558 :デフォルトの名無しさん:2012/06/02(土) 10:14:51.22
>>556
ネットで全文(英語)読めるしな。そういう意味では要らない。

559 :デフォルトの名無しさん:2012/06/02(土) 10:21:22.33
そうなんだよなあ。Webでだいたい読んじゃったから今さら買う気がしない。
訳が気になるだろうしね。

560 :デフォルトの名無しさん:2012/06/02(土) 10:53:30.66
読んじゃった人は買わなくていいじゃん。付録がちょっとあったけど、自分で英文読み通す勢いのある人は、
自己解決しちゃうだろうし悩む事もないって

561 :デフォルトの名無しさん:2012/06/02(土) 11:39:40.83
MLやircで詳しい兄貴達に質問できるぐらいの英語力が欲しい

562 :デフォルトの名無しさん:2012/06/02(土) 11:42:25.55
>>561
目標もちゃんと定まってて欲しているのなら、あとは勉強するだけだろ

なんでしんないの?

563 :デフォルトの名無しさん:2012/06/02(土) 11:49:56.39
お前はまず日本語を勉強しろw

564 :デフォルトの名無しさん:2012/06/02(土) 11:52:49.19
ごめんごめん

ちょっと日本語忘りかけてるから

565 :デフォルトの名無しさん:2012/06/02(土) 12:04:21.25
英語を勉強すると日本語が馬鹿になって死ぬ

http://twitpic.com/9j2u1m
> 「トムはこれからカムバックというところを、交通事故で亡くなってしまった。」

566 :デフォルトの名無しさん:2012/06/02(土) 12:05:46.42
#haskellでがんばって質問する
→ 懇切丁寧な説明が返ってくる
→ 読解するのがやっとで返事が出せず焦ってわけわかな英語を吐く
→ なにかまずいことを言ったらしくフレームウォー開始
→ ログオフして枕を濡らす
→ 数日後、自分の痴態がIRCログとしてWebで公開されていることを知り鬱になる

一部フィクション

567 :デフォルトの名無しさん:2012/06/02(土) 12:17:29.81
>>558
「英語読める人は出来の悪い邦訳書なんか読まずに原文当たれば良い」
というのがこの問題の正しい解決方法とは思えない。

折角Haskellに興味を持ってくれたCS入門者の悪書によって出端を挫かれ、
他の言語へ移ってしまうことこそ大きな損失だと考えなくてはならない。


568 :デフォルトの名無しさん:2012/06/02(土) 12:21:50.78
二位じゃダメなんですか?

569 :558:2012/06/02(土) 12:49:04.42
>>567
ぼかぁ翻訳の出来が悪いとは言ってないんだけどな。

英語全文がネットでタダで公開されてるんだから英語をスラスラ読める様な人には
要らないという普通に当たり前の事を書いただけだ。

自分はまだ11章ぐらいまでしか読んでないけど訳の質が悪いとは思わなかったなぁ。
7章ぐらいからは内容の難易度も少しずつ上がってるのでペースダウンしてる。

570 :デフォルトの名無しさん:2012/06/02(土) 12:55:08.15
>>557
別に何も悪くないよ。ghciの仕様。
(ghciは出力にshowを使うからshowの仕様でもある)

571 :デフォルトの名無しさん:2012/06/02(土) 12:58:56.57
>>570
多分質問者は対処方法を尋ねているのだと思われる

僕も知らないので教えてにゃん

572 :デフォルトの名無しさん:2012/06/02(土) 13:04:40.35
何がしたいのか微妙に分からんから対処法を考えるのも難しいけど、
エスケープされるのが嫌ならshowを使わなきゃいい。
自分で format :: [(Integer, String)] -> String
みたいなのを書いて、putStrLn $ format $ zip [1..] ["りんご","みかん"]
するとか。

いちいちそんなことするのが馬鹿らしいと思うなら、showの仕様を変えるように提案するしかないね…

573 :デフォルトの名無しさん:2012/06/02(土) 13:12:53.72
>>572
ありがとう!

574 :デフォルトの名無しさん:2012/06/02(土) 13:17:06.20
tanakhHideyuki Tanaka 35分前
あえー。そんなに翻訳ひどくなってますかね… > 某スレ

575 :デフォルトの名無しさん:2012/06/02(土) 13:19:50.70
翻訳はかなりマシの方だけど。
バランスが悪いな、全体真面目な文章なのに、突然ギャグが入ってくるところとか。

最高クラスの翻訳は日本人が書いたのと全く見分けがつかないけど。
これはところどころ、英文臭が漂うね。


576 :デフォルトの名無しさん:2012/06/02(土) 13:23:06.25
技術書ではむしろ、元の英文が想像できたほうがいい場合すらあるから、
それは問題ないと思う。

577 :デフォルトの名無しさん:2012/06/02(土) 13:25:10.70
>>567
日本の製本技術の素晴らしさを知らないとは…

578 :デフォルトの名無しさん:2012/06/02(土) 13:29:33.39
>>496,497,498 で誰も問題だとは言っていない。
普通の翻訳だよねって話。

もうちょっというと、本は素晴らしいただ訳者のレベルがまぁ○○だよね。

579 :デフォルトの名無しさん:2012/06/02(土) 13:31:07.00
あからさまな燃料投下はやめてください

580 :デフォルトの名無しさん:2012/06/02(土) 13:40:45.28
伏字にして気を使っているのに、あからさまとはどこを見ての判断なの?

581 :デフォルトの名無しさん:2012/06/02(土) 13:40:51.82
>>575
突然ギャグが入るのは原文もそうだし、ナンセンスギャグなんかもあって
完全にニュアンスを伝える翻訳は難しいだろうな。

関数を評価してる間に犬が誘拐されて家に火が付けられるとか日本語で言われると
このナンセンスさのノリが伝わりにくい。

582 :デフォルトの名無しさん:2012/06/02(土) 13:49:28.57
>>581
それ、ギリシア神話で似たようなのなかったっけ?

583 :デフォルトの名無しさん:2012/06/02(土) 13:50:48.46
>>582
イソップ物語

584 :デフォルトの名無しさん:2012/06/02(土) 13:52:44.53
>>580
直訳がまずいところを具体的に示すことなく
訳者のレベルを否定的な表現を交じえて伏せ字で示すあたり燃料以外になにがあるのかと

585 :デフォルトの名無しさん:2012/06/02(土) 13:54:25.86
翻訳がマズい箇所を1ページ目から列挙するの?

586 :デフォルトの名無しさん:2012/06/02(土) 13:54:32.87
>>584
ttp://blog-imgs-42.fc2.com/k/i/r/kira47/20120410171046c16.jpg

587 :デフォルトの名無しさん:2012/06/02(土) 13:56:41.62
>>584
ttp://30.media.tumblr.com/tumblr_l658t8RQIh1qz7zoso1_500.gif

588 :デフォルトの名無しさん:2012/06/02(土) 13:56:49.19
>>585
全部挙げろとは言わないが例示ぐらいあってもいいんじゃない

589 :デフォルトの名無しさん:2012/06/02(土) 14:03:20.91
>>588
読む人のレベルがバラバラなんだから学生同士が話しているのとはわけが違うぞ。
それなのに例示をしめした所で単にこじれるだけだっつーの。

590 :デフォルトの名無しさん:2012/06/02(土) 14:05:37.10
2chがこじれたところでどうということはない。

591 :デフォルトの名無しさん:2012/06/02(土) 14:10:43.81
>>589
著者のレベルも読む人のレベルによって左右されるものだよね
それを伏せ字を交じえて断じた時点でこじれるには十分だしこうして実際にこじれてる

592 :デフォルトの名無しさん:2012/06/02(土) 14:31:32.85
スレで査読がはじまると聞いて

593 :デフォルトの名無しさん:2012/06/02(土) 15:29:52.31
本当にまずい訳が多いならかいつまんで例示くらいできるでしょ

594 :デフォルトの名無しさん:2012/06/02(土) 16:17:24.06
>>593
>>578

595 :デフォルトの名無しさん:2012/06/02(土) 16:25:46.66
>>594
アホなのか?
訳者のレベルがまずいってんなら訳文で示せって言ってんだけど。
さっきからテメー苦し紛れに雑魚いレスつけやがってうざいんだよ

596 :デフォルトの名無しさん:2012/06/02(土) 16:33:57.60
>>595

 ┏━━━━━━┓
 ┃   Λ_Λ  ┃
 ┃   ( ;@Д@)  ┃
 ∧_∧ (m9  つ ┃
(   )人 Y     ┃
( O つ (_)    ┃
`ノ  イ━━━━━┛
し-"(_)

597 :デフォルトの名無しさん:2012/06/02(土) 16:35:26.86
今、全部列挙してるから、スレをサスペンドして待っててください

598 :デフォルトの名無しさん:2012/06/02(土) 16:38:11.10
オートリロード・オートスクロール便利ね。

599 :デフォルトの名無しさん:2012/06/02(土) 17:39:24.51
Haskellやるような知的レベルの高い人は暴言なんて吐かない(ρ_;)

600 :デフォルトの名無しさん:2012/06/02(土) 18:36:04.29
どこだったか忘れたけど、「いくら〜しても〜しすぎることはない」っていう文を見たときは、ちょっと中学英語っぽ過ぎると思ったかな
でも全体としてはよく訳せてると思うよ…

601 :デフォルトの名無しさん:2012/06/02(土) 18:54:21.55
haskellスレがsicpスレ化しだしたね。しばらくはここも終ったと割りきるしか無いかも。
粘着さんが一番怖い。パール忍者が10人いるような状態が一番まずい。

602 :デフォルトの名無しさん:2012/06/02(土) 19:22:15.27
最初から訳は問題だとは誰も言っていないのに。
>>595
のようにまずいってどこがだとか
なかった問題をさもあるように作り上げて楽しむ愉快犯がいるからなぁ。

603 :デフォルトの名無しさん:2012/06/02(土) 20:24:26.29
英語の勉強しすぎると
和訳に使う日本語に慣れてしまうよね
無生物主語を日本語でも普通に使うようになったり

604 :デフォルトの名無しさん:2012/06/02(土) 21:09:51.24
そもそもSICPスレの基地外みたいな、日本語が怪しいクズ野郎が翻訳を語るとか

605 : ◆QZaw55cn4c :2012/06/02(土) 21:28:38.35
>>603
無生物主語は立派なひとつの文体。つ村上春樹

606 :デフォルトの名無しさん:2012/06/02(土) 22:08:05.30
訳書を買った時、この本くらいのレベルで訳されてたら感謝感激する。
それくらい質が高い、と思う。

エキスパートプログラミングに匹敵するんじゃない?

607 :デフォルトの名無しさん:2012/06/02(土) 22:49:31.03
Windows7でLeksah 0.12を使っているのですが、
Altキーを押しても普通のWindowsアプリケーションのようにメニューにフォーカスが移動しません。

フォーカスをメニューに移動させるキーって用意されていないのでしょうか?

608 :デフォルトの名無しさん:2012/06/03(日) 00:04:05.61
訳者のレベルって何が言いたかったんだろう
訳が上質であれば私はそれでいいです

609 :デフォルトの名無しさん:2012/06/03(日) 00:20:13.68
>>603
それはある。俺の文章は既にその傾向にあるし、2ちゃんで翻訳文章みたいと
言われたことがあった。

610 :デフォルトの名無しさん:2012/06/03(日) 00:30:56.98
それはある。

611 :デフォルトの名無しさん:2012/06/03(日) 00:48:46.14
>>603

いくらか度を越した英語学習は私が和訳に用いる日本語の語彙にも影響を及ぼしていた

612 :デフォルトの名無しさん:2012/06/03(日) 04:10:47.88
修辞学の授業はっじまっるよ〜

613 :デフォルトの名無しさん:2012/06/03(日) 07:02:53.46
さあ諸君、議論したまえ

614 :デフォルトの名無しさん:2012/06/03(日) 10:17:36.62
>>529
> >>525 
> >>なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
> 感情丸出しで書き込んでいて、自分が一番食物連鎖の最下層にいるって気付かないのかな?

俺食われちゃうのかな?

615 :デフォルトの名無しさん:2012/06/03(日) 11:41:42.15
>>607
他の人も問題にしています。

http://code.google.com/p/leksah/issues/detail?id=119
例えばこの人は [Alt + F] が効かないと言っていますが、
本質的に貴方と同じ問題を提起しています。

ただ、この人の問題提起は2009年9月で、
その現象の再現が確認できたのでどうにかしたいと、
プロジェクトメンバーが返事していますね。

にもかかわらず、未だに直っていないのなら、直す気がないのでしょう。

616 :デフォルトの名無しさん:2012/06/03(日) 22:01:01.17
結局訳に関する具体的な指摘はどうなったんだ

617 :デフォルトの名無しさん:2012/06/03(日) 23:14:58.91
結局、取り立てて言うほどのものはないという結論になったような。
訳者のレベル云々言っておきながら「訳に問題があるなんて誰が言った」という論理はよく分からんが、
まぁなんか一言言いたかったんだろう。あまり蒸し返さない方がいい。

618 :デフォルトの名無しさん:2012/06/03(日) 23:18:38.10
日本語とか偉そうなフリができるところで、権威を叩くと相対的に自分が賢くみえるの!!
他人のレベルが低い…俺のレベルは高い…俺輝いてるッ 気持イイッ

619 :デフォルトの名無しさん:2012/06/04(月) 00:16:04.93
昔からある基本的な手法だしな。そのおかげでいろんなマナー本やビジネス本が売れる。

620 :デフォルトの名無しさん:2012/06/04(月) 00:17:22.83
ああ、つまり「やってはいけません」系の本ね。
お買い上げありがとうございます。

621 :デフォルトの名無しさん:2012/06/04(月) 06:34:45.23
蛇足な上に正しいとは言い難い訳注の詳細マダー?

622 :デフォルトの名無しさん:2012/06/04(月) 07:17:43.18
訳者に難癖付けたい人が居るようですね^^

623 :デフォルトの名無しさん:2012/06/04(月) 08:15:42.96
(誤りの指摘==難癖)な厨房思考が透けてみえるレスあざーす

624 :デフォルトの名無しさん:2012/06/04(月) 08:49:18.45
具体的な指摘をできない限り、「蛇足な上に正しいとは言い難い訳注」と言うだけの奴こそ
誰がどう見ても厨房。>>623 はさらにそれ以下の消防。

625 :デフォルトの名無しさん:2012/06/04(月) 09:20:11.41
訳者のマッチポンプだろ。
ネットで調べてみたら胡散臭いやつだったしな

626 :デフォルトの名無しさん:2012/06/04(月) 09:21:26.82
三段論法を使えるがレッテルを貼る程度の能力

627 :デフォルトの名無しさん:2012/06/04(月) 09:35:52.41
三段論法も使えていなかったような

628 :デフォルトの名無しさん:2012/06/04(月) 11:19:01.24
                    /j
                   /__/ ‘,
                  //  ヽ  ', 、
                    //    ‘  ! ヽ             …わかった この話はやめよう
                /イ       ', l  ’
               iヘヘ,       l |  ’
               | nヘヘ _      | |   l            ハイ!! やめやめ
               | l_| | | ゝ ̄`ヽ | |〈 ̄ノ
               ゝソノノ   `ー‐' l ! ¨/
            n/7./7 ∧        j/ /     iヽiヽn
              |! |///7/:::ゝ   r===オ        | ! | |/~7
             i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ..     nl l .||/
             | | | | l {':j`i::::::::::::::::`ーr '         ||ー---{
              | '" ̄ ̄iノ .l::::::::::::::::::::::∧       | ゝ    ',
      , 一 r‐‐l   γ /、::::::::::::::::::::::::〉ー= ___  ヘ  ヽ   }
    / o  |!:::::}     / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ     ノ
   / o    ノ:::::∧   /ヽ  o  ヽ::::::::| o i::::::::ヽ、 /   /
   /    ノ::::::/    /::::::::ヽ  o  ヽ:::| o {::::::::::::::Υ   /


629 :デフォルトの名無しさん:2012/06/04(月) 11:37:58.59
>>621
p.57
O(NlogN)で抑えるなんて言い方は無い。上に抑えられていることをO(NlogN)程度と言う。
訳者はOの定義もΩやΘとの違いも知らないんだろうな。

所要時間の期待値の件も変。普通は所要時間の期待値と言ったら全ての可能な入力に対する期待値の事だが、この意味ではピボットをどう選ぼうが(選択に定数時間しかかけない限り)クイックソートの計算量の期待値はO(NlogN)だ。
ある特定の入力に対する確率的アルゴリズムの計算量の期待値のことを言いたいんだろうが、本文中には決定的アルゴリズムの話しか出て来てないのにいきなりそっちを持ち出すのは変。
p.150
正格評価でも、yesResultとnoResultの両方を評価するなら実装は遅延評価とほとんど変わらないので、この訳注は完全に嘘。片方しか評価したくない場合なら遅延評価の方が手軽に実装できるのは分かるが、二文目で自分で否定してる。


630 :デフォルトの名無しさん:2012/06/04(月) 12:04:49.79
そんなことよりお前らついにリリースしたぜ
Haskell Platform 2012.2.0.0
http://hackage.haskell.org/platform/

真っ赤かだな

631 :デフォルトの名無しさん:2012/06/04(月) 12:38:14.93
やっと普通の批判がでてきたのはよろこばしいぞ

p.57脚注は慣用的にアリだという気もしなくはないけど、確かに厳密な言葉を使わないかんね

p.150脚注は「二文目で否定して」はいないと思うのだがどうか。

で、多くて萎えた、という割には2つしかない(というか実質1つ?)なん?


632 :デフォルトの名無しさん:2012/06/04(月) 12:42:05.03
批評に必要な範囲で引用しておくか。
> p.160訳注: yesnoIfがこのように手軽に実装できたのは、
Haskellが遅延評価を基本とする言語だからこそ です。一方、
正格評価では、 yesnoIf を呼び出す前に、 yesResult と noResult
の両方を評価し終える必要があります!

違和感ないけどなぁ。まあ私なら「必要があります」というより、「yesnoIfの前に両方が評価されてしまいます」と書くかも


633 :デフォルトの名無しさん:2012/06/04(月) 13:06:13.22
>>632
それだと実装の手軽さは変わらないから、第一文も直さないとだめだな
p.160脚注は「正格評価だと事前に両方評価しないといけないから実装が面倒!」と読めるし、
嘘もしくは酷いミスリーディングと言われても仕方ない

634 :デフォルトの名無しさん:2012/06/04(月) 15:56:19.49
Haskellを理解する気は無いがdisりたくて仕方ないので
門外漢でも分かるところに噛み付いてるのがミエミエで微笑ましいw

>>633
お前、正格評価でyesnoIf実装してみろよ
まあ100%逃げるだろうけど

635 :デフォルトの名無しさん:2012/06/04(月) 16:34:49.17
Haskell手習い中って文脈考えると、訳注に厳密な評価器論を書くのはやり過ぎになるだろうな。
かと言って「手軽に実装できる」じゃ曖昧すぎる気もするが。

せいぜい「yesnoIfが通常の関数と同じように記述できるのは、
Haskellでは引数の評価に遅延評価を採用しているからです」と注意を促すくらいがいいところか。
訳本は持ってないが、元のテキストでは評価器の話はほとんどなくて、
lazinessに対する直感的な理解に留まってたんじゃないかな。

636 :デフォルトの名無しさん:2012/06/04(月) 16:35:54.20
>>634
>>632の前提なら、遅延評価版と一字一句変わらないな
話の流れ読めてる?

637 :デフォルトの名無しさん:2012/06/04(月) 16:36:52.63
「正格評価」は、先行する訳注で既に解説済みなのかな。

638 :デフォルトの名無しさん:2012/06/04(月) 16:41:35.03
yesResultもnoResultも副作用ないコード例しかないし、
本文でもlazinessには触れてない。
ここで遅延評価の訳注は本文の趣旨からいくとややミスリード気味だと思われる。
盛り込みたくなる気持ちはわかるが。

639 :デフォルトの名無しさん:2012/06/04(月) 16:46:50.87
yesResultとnoResultが両方評価されるとマズいのかどうかとか本文中に全く書いてないのに、
訳注でいきなりマズいこと前提にしてるのもおかしな話

640 :デフォルトの名無しさん:2012/06/04(月) 18:33:18.04
>>630
目玉は?

641 :547:2012/06/04(月) 19:10:50.82
>>549
分りにくい質問ですいませんでした。

歴史というのは、Haskell の遅延評価の実装が
初期に比べてどんどん効率的になってきた発展の歴史のことでした。

と言うのも、私は正直なところ既にかなり洗練されたものの仕組みを調べても、
なかなか頭に入らない類の人間なもので、原始的なところから
少しずつ調べていこうと思った次第です。

まずは教えていただいた資料を読み、さらに参考資料を辿って学んでみたいと思います。


GC と遅延評価は密接に絡んでいると思ったのですが、そうでもないのですね。
それでしたら、とりあえず GC は後回しにします。

>>552
ということで、興味自体はあるのですが、またの機会に読んでみようと思います。

お二人とも、ありがとうございました。

642 :デフォルトの名無しさん:2012/06/04(月) 19:49:51.35
GCないと遅延評価はやりづらい。
Thunkの回収を明示的にやるのは難しいから。
けどGCの研究がずっと先行してる。
独立に勉強して。

それからHaskellの処理系開発で遅延評価が劇的に向上したことはない。
むしろライブラリ実装の方で起きてる。

643 :デフォルトの名無しさん:2012/06/04(月) 20:00:36.96
あるいはHaskell的な関数型言語の実装についての基礎なら、
SimonさんのImplementing functional languages: a tutorialあたりをとっかかりに。

644 :デフォルトの名無しさん:2012/06/04(月) 20:36:06.66
もう何年も前の話だが、小説家で言語学者でもあるユーシュル・モリナーロ氏
と筆者は、同氏によるヘルマン・ヘッセ著『知と愛』の翻訳について話し合った
ことがある。モリナーロ氏はほぼ1年にわたり、その本のドイツ語版を抱えて
自宅と作業場となっていたカフェを行き来した。
あるとき、好奇心を抑えきれなくなったクリーニング店の店主がついに、
同氏が分厚い本を抱えている理由を聞いた。「翻訳しているんです」と
モリナーロ氏が説明すると、驚いて目を見開いた店主が聞き返した。
「一語残らずですか」

(略)

 筆者の友人のクリーニング屋が想像したように、一語一語を厳密に訳し
ていく翻訳など存在しない。うまい翻訳をするには、奇術師でもあるべき
だろう。本文の一部を手品師の鳩のように跡形もなく消し、
自らの感覚で部分的に手直しして全く違う場所に復活させる。
これはすべての生き生きとした魅力あふれる翻訳の決まりの悪い事実である。

本文が描写していることが自分たちの文化では非現実的に思えるとき、
翻訳者たちはときに自らの見解を差し挟む。たとえば、パリの住人が平日に
3時間かけて取る昼食を退屈で日常的なこととして描かなければならない
という現実に直面することがある。そんなときはどうするか。
とにかくそのまま進み、読者の大半がフランスの文化に十分精通していて、
そのきわめて日常的なことをひどく非現実的とは思わないことを願うばかり
である。

文化的な違いが最も露骨に表れるのは、翻訳の破たんとも考えられている
言語学的難題、だじゃれである。
(略)

http://jp.wsj.com/Life-Style/node_451636

645 :547:2012/06/04(月) 20:48:07.98
>>642 >>643
わかりました。

同時にはできないので、まずは遅延評価の根幹から学びます。

> それからHaskellの処理系開発で遅延評価が劇的に向上したことはない。

これから学ぼうとする私にとっては大変有難い事実です。

646 :デフォルトの名無しさん:2012/06/04(月) 21:27:15.02
>>633 >>635 >>639
いやいや、流れで言えばこの訳注はわりと適切な位置にあるし、第一文も完全に正しいでしょ
この遅延評価の話が出てくるのは7章も後半で、Haskellの多くの部分が説明された後だ。
「正格評価」という言葉こそないが、正格さについては遅延評価とあわせてpp.80-100あたりでfoldl'の話と一緒に長い議論があるし、
そんな一部分だけ取り出してミスリーディングとか騒がれてもナァ


647 :デフォルトの名無しさん:2012/06/04(月) 21:28:53.20
あと >>636 一字一句変わらないのかよw お前は「はじめに」を100回読み直すべき

648 :デフォルトの名無しさん:2012/06/04(月) 21:37:07.50
>>646
>第一文も完全に正しいでしょ
何の根拠も書かずに主張されてもな
じゃあ「遅延評価を基本とする言語だから」yesnoIfが「手軽に実装できる」ことを実例付きで説明してくれ

>>647
もう一回聞くが、話の流れ読めてる?

649 :デフォルトの名無しさん:2012/06/04(月) 21:53:41.23
632にあるようにyesnoIfの前に両方が評価されてしまってもいいなら、正格評価でもコードは変わらんでしょ
647はなにが言いたいのかさっぱり分からん

650 :デフォルトの名無しさん:2012/06/04(月) 22:22:36.54
>>648

副作用が絡まなくて意味がある例なら、たとえばこんなのとか。

sinc x = yesnoIf (x == 0) 1.0 (sin x / x)

正格評価だとクロージャにつつまなければいけないから、
yesnoIfの定義も呼び出し側もちょっとめんどくさくなる。



651 :デフォルトの名無しさん:2012/06/04(月) 22:27:21.62
このネタは、等式推論を使ってよいのであれば
yesResult /= ⊥ → yesno p = True → yesnoIf (yesno p) yesResult ⊥ /= ⊥
を使って説明するのが簡単なのだけど、あの本は等式推論について触れてないから
正直lispでifをdefunを使って実装した場合とdefmacroを使って実装した場合の違いを説明するよう泥臭い説明しかできないだろうな
原著でも⊥になる値を突っ込んだものを例に含めてないのはこの辺の厄介を回避する為なのだろうかと思ってしまう

652 :デフォルトの名無しさん:2012/06/04(月) 22:33:27.08
そんなムズカシイことかんがえなくても yesResult と noResult がコスト重い計算だったらどうなると想像すればいい
「はじめに」から順に読めばまあ多分普通にわかること


653 :デフォルトの名無しさん:2012/06/04(月) 22:40:32.12
>>650
だからそれは「yesnoIfの前に両方が評価されて欲しくない」という前提の場合だろ
yesnoIfの要件が本文中に全く書かれていないのに、
訳注で勝手にそんな前提を置いているのはおかしい、というのが今の話なんだが
むしろ脚注の第二文を見ると、「正格評価のyesnoIfではyesnoIfの前に両方が評価される」と読める
これは>>650で言っていること(そしておそらく脚注の第一文で言いたいこと)と真逆だ

654 :デフォルトの名無しさん:2012/06/04(月) 22:44:16.38
めんどくさいこと考えてる奴だなー要件もなにもHaskellのifなんだから遅延評価にきまってるだろ

655 :デフォルトの名無しさん:2012/06/04(月) 22:48:13.67
s/Haskellの//

656 :デフォルトの名無しさん:2012/06/04(月) 22:51:24.19
それだと脚注の第二文が意味不明だな
だって、クロージャに包んでyesResultとnoResultが先に評価されないようにする/できるんでしょ?

657 :デフォルトの名無しさん:2012/06/04(月) 22:54:37.59
もういいよ

658 :デフォルトの名無しさん:2012/06/04(月) 23:04:41.57
仮にifが遅延評価なのが常識だとしても、遅延評価を基本とする言語で遅延評価のものが手軽に実装できるのは当たり前
逆に正格評価のものを実装するなら正格評価を基本とする言語の方が手軽に実装できるだろう
それをまるで遅延評価の利点であるかのように書いてるp.160(p.150?)訳注はミスリーディングだと思うな

659 :デフォルトの名無しさん:2012/06/04(月) 23:11:21.77
いわゆるif文やif式を遅延評価だなんて言うのは適切でないと思うし、あまり聞いたこともない
ifは(thenとelseについて)非正格というならまだしも

660 :デフォルトの名無しさん:2012/06/04(月) 23:13:56.48
>>653
思うに脚注一文目で言いたいことはまさにそれ。
正格評価だと、引数を先に評価しないようにするためにクロージャやマクロ等を使わなければならないのがめんどくさいということ。

脚注二文目で言いたいことは多分、正格評価は引数を先に評価するという意味と思ってよいから、めんどくさくなるのは正格評価である以上仕方ないということ。

たしかに簡約だとか式の変換とかなしでのこの訳注は、Haskell初心者にとっては意味不明な気もする。


661 :デフォルトの名無しさん:2012/06/04(月) 23:27:51.68
まあ脚注二文目は変だね。ここは正格評価では簡単に書けない、という主張がこないと
話がつながらない。筆が滑ったんでしょ。


しかし、こんな全体としてこんなに出来のいい訳本に文句つけるなんて、Haskellerは贅沢すぎる。
「プログラミングの壺」の訳本をみせてやりたい。

662 :デフォルトの名無しさん:2012/06/04(月) 23:40:58.96
>>661
俺はこの議論には参加せずずっとROMってたんだが、
文句つけてくれたお陰で見識を得た

むしろ、ありがとうと言いたい

663 :デフォルトの名無しさん:2012/06/04(月) 23:54:20.59
>>631
しつこく聞いてくるから例を挙げただけだよ。全部書くのは面倒なので勘弁。

664 :デフォルトの名無しさん:2012/06/04(月) 23:55:40.46
いや、↑でありがとうって言ってる人いるし、先生続きをお願いします(あるなら)!

665 :デフォルトの名無しさん:2012/06/04(月) 23:58:38.39
>>661
なんでもそうだけど、声のデカいアホをコミュニティの代表扱いするのは辞めてほしい

666 :662:2012/06/05(火) 00:01:11.27
>>664
いや、俺は「文句つけるなんて、Haskellerは贅沢すぎる」に対して、
そう悪い面ばかりでもないよという意味で言ったまでだ

他のHaskellerには迷惑かもしれんし、そもそも訳の質についてはスレチだから、
ほどほどにしておいた方が良いと思うよ

667 :デフォルトの名無しさん:2012/06/05(火) 00:06:59.51
訳はともかく訳注に間違いがあるのなら指摘は有意義なことだと思うが.

668 :デフォルトの名無しさん:2012/06/05(火) 00:07:43.42
単に荒れるだけかと思ってウルトラマンを貼ってみたが、意外に議論がされたんだな。さすが。

669 :デフォルトの名無しさん:2012/06/05(火) 00:15:16.32
結局まともな指摘は>>629だけか

670 :デフォルトの名無しさん:2012/06/05(火) 01:57:46.05
>>646
> 正格さについては遅延評価とあわせてpp.80-100あたりでfoldl'の話と一緒に長い議論があるし、

Data.Listの紹介でfoldl'ってstricterなバージョンがありますって紹介してるだけじゃないの?

671 :デフォルトの名無しさん:2012/06/07(木) 08:26:06.90
こう書くと、どこが正格でどこが非正格で
落とし穴がこうで云々詳しく扱ったサイトありませんか?

672 :デフォルトの名無しさん:2012/06/07(木) 12:43:25.09
Haskell って、あるライブラリの関数の引数が
正格評価なのか非正格評価なのかって、
シグネチャ見るだけじゃ分らないんだよね。

ライブラリユーザーにこれを伝えるには、
関数名で分るようにしておくか、
ドキュメントに注意書きするくらいしか方法はないの?

673 :デフォルトの名無しさん:2012/06/07(木) 14:48:32.13
>>661
翻訳の技量は普通だけど
Haskellの技術者としては指導できるレベルじゃないってことでしょ。

平たくいえば、外国でHaskellの天才が書いた本を
自分もそのおこぼれを与ろうと低レベル者が翻訳してみせたのがこのすごいH本。

翻訳者もHaskellの天才だったら良かったのに、
単に金儲けがしたい、英語力はそこそこだが、
Haskellはちょっとかじった程度のやつに目をつけられて
金儲けの道具にされてしまった。
原作者は散々だったな、可哀想だって思ったのが
この騒動の発端だろう。

674 :デフォルトの名無しさん:2012/06/07(木) 15:08:07.89
        *'``・* 。
        |     `*。
       ,。∩      *    もなど
      + (´・ω・`) *。+゚
      `*。 ヽ、  つ *゚*
       `・+。*・' ゚⊃ +゚
       ☆   ∪~ 。*゚
        `・+。*・ ゚

675 :デフォルトの名無しさん:2012/06/07(木) 15:12:08.66
10年触ってる人がニワカ扱いとか2ch凄いですね

676 :デフォルトの名無しさん:2012/06/07(木) 15:52:45.14
10年?
中学3年、高校3年、大学4年英語勉強して
英語喋れない奴は腐るほどいるぞw

677 :デフォルトの名無しさん:2012/06/07(木) 16:00:05.43
英語は使わなければ使えるようにならないというのがあるな
同様にHaskellもそれで食ってるぐらいじゃないと実用性を啓蒙できる立場では無いとか
本や講演で儲けるだけの段階ではマルチとかあやしいビジネスセミナーとか宗教とかと同レベルだと
確かに近年の○○勉強会みたいな類はそういう妙な空気があるように思える

678 :デフォルトの名無しさん:2012/06/07(木) 16:29:01.30
10年触っている人だから天才ってことはないな。

679 :デフォルトの名無しさん:2012/06/07(木) 16:35:30.25
最近SICPスレで暴れても誰も相手にしてくれないのでこっちに来ました!
なんかしんないけど言いがかりみたいないちゃもんつけて翻訳の悪口
を言って盛り上がるスレですよね?

正直「すごいハスケル」って本は買ってないし読んでないし読むつもりもないんですが
翻訳の質にガンガン文句言って盛り上げていきますんでヨロシク! (^з^)-☆

680 :デフォルトの名無しさん:2012/06/07(木) 16:56:11.29
>>501,502みたいな日本語不自由レベルの人間が叩いているかと思うと頭が痛くなるな

681 :デフォルトの名無しさん:2012/06/07(木) 17:09:29.22
>>680
十分意味が通じるけど?

682 :デフォルトの名無しさん:2012/06/07(木) 17:11:21.36
蒸し返し禁止

683 :デフォルトの名無しさん:2012/06/07(木) 17:13:22.44
>>680
2chならそれで十分だろ。


684 :デフォルトの名無しさん:2012/06/07(木) 17:46:11.31
>>680
どこの学士様ですか?

685 :デフォルトの名無しさん:2012/06/07(木) 18:34:20.52
この反応は図星ですっていってるようなもんだなw

686 :デフォルトの名無しさん:2012/06/07(木) 19:23:26.40
原書読めないから翻訳本買ってるんでしょ。
そんな英語力で偉そうに文句言って恥ずかしくないんかな?

687 :デフォルトの名無しさん:2012/06/07(木) 19:31:38.77
>>686
恥ずかしいとか、そんなのどうでもいい

良くない部分、おかしい部分、曖昧な部分は
気づいた者が躊躇なく指摘すべき

恥ずかしがる理由なんて微塵もない


688 :デフォルトの名無しさん:2012/06/07(木) 19:37:39.12
そんなことよりバンドやろうぜ
http://www.bigbasstabs.com/

俺タンバリンな

689 :デフォルトの名無しさん:2012/06/07(木) 20:05:27.72
QT 今月の誕生日に彼女からすごいH本プレゼントされたらどうしよう。。。準備しておくべきだろうか。。。 [うさみみ*´×`*エンジニア]

690 :デフォルトの名無しさん:2012/06/07(木) 20:10:11.96
お前にはまだ早い
はじめてのCをお返しとけ


691 :デフォルトの名無しさん:2012/06/07(木) 20:40:40.78
ttps://twitter.com/AoiMoe/status/210614093273497600
> 「すごいC楽しく学ぼう」という保健体育本はまだですか

692 :デフォルトの名無しさん:2012/06/07(木) 20:50:35.36
H本ネタはいい加減飽きた
ム板てネタに対してちょっとしつこいな

693 :デフォルトの名無しさん:2012/06/07(木) 21:58:42.33
粘着力ないやつはプログラマー向かないだろ。
コンピュータは適当にこなしといてくれないし。

694 :デフォルトの名無しさん:2012/06/07(木) 22:28:40.23
終わった後で蒸し返せばいいやと思うと、終わる前に粘ることができなくなる

695 :デフォルトの名無しさん:2012/06/07(木) 22:30:46.90
同じネタを入れると常に同じ返しがくる

…さすがHaskellスレ

696 :デフォルトの名無しさん:2012/06/08(金) 07:39:22.11
コンプ丸出しで訳者の印象だけを語るってのがどうにもね。。。
説得力ないし、もっとHaskellの内容で勝負しようぜ


697 :デフォルトの名無しさん:2012/06/08(金) 07:41:28.68
第一Haskellの天才ってなんだよw発想があきらかにオッサン

698 :デフォルトの名無しさん:2012/06/08(金) 08:13:12.11
>>696
>>646, 647, 652辺りで一人頓珍漢な指摘してた人?

699 :デフォルトの名無しさん:2012/06/08(金) 08:45:52.89
↑こいつ病気だろ

700 :デフォルトの名無しさん:2012/06/08(金) 09:41:25.54
図星だったのか

701 :デフォルトの名無しさん:2012/06/08(金) 10:15:30.48
>>673
突っ込まれてる内容を見る限り、
Haskellの技術者としては、と言うよりエンジニアとしては、だな

702 :デフォルトの名無しさん:2012/06/08(金) 13:58:27.24
まず「叩く」という関数を呼ぶが引数である「叩く理由」は遅延評価というか何も考えてない。
さすがHaskellerやで。

703 :デフォルトの名無しさん:2012/06/08(金) 14:56:27.48
一般論として、訳があるのはいいこと。よっぽどの悪訳でない限り。
チュートリアルなんだから、沢山の人に読まれるのがよい。
誤訳等の指摘があるのいいこと。度を越さない限り。
チュートリアルなんだから、よりよい訳になれば、なおいい。
叩きすぎるのも、容認しすぎるのも思考停止に陥りやすい。

704 :デフォルトの名無しさん:2012/06/08(金) 16:46:43.04
このスレどこに向かうの?

705 :デフォルトの名無しさん:2012/06/08(金) 16:52:46.55
斜に向かってます

706 :デフォルトの名無しさん:2012/06/08(金) 19:47:00.73
reactive ってバージョンと更新日の新旧がテレコってるのがあるんだけど。

reactive-0.5.0.1
  Sat Sep 10 21:41:20 UTC 2011
  Uploaded by RussellOConnor
  Built on ghc-7.2

reactive-0.11.5
  Upload date Sat Sep 10 21:41:20 UTC 2011
  Uploaded by ConalElliott
  Built on ghc-6.12

これって、ConalElliott に代わって RussellOConnor が
昔のバージョン 0.5.0.1 を ghc-7.2 で焼き直したから、
こっちを使ってくれってこと?


あと、ConalElliott って reactive も自身のブログも全然更新しないんだけど、
ひょっとしてもう死んだ? まだ生きてるよね

707 :デフォルトの名無しさん:2012/06/08(金) 21:59:17.26
とりあえずどんなものか試すなら0.5.0.1を使ってチョ、
くらいの意味じゃないかなぁ。学生の講義で使ったとか?まったくの憶測だけど
RussellOConnorのサイトを探したら http://r6.ca/code.html にあったけど、
特にこのパッケージについて言及ないっぽい

708 :デフォルトの名無しさん:2012/06/08(金) 22:39:37.86
Parsec の st の意味が分かりません
どこを見ればいいでしょうか?

709 :デフォルトの名無しさん:2012/06/08(金) 23:13:24.34
stって何だっけ。
どこで出てくるstなのか書いてもらえないと答えようがないよー


710 :デフォルトの名無しさん:2012/06/08(金) 23:25:43.90
>>709
↓ みたいな感じで関数の型に出てくる st です

GenParser Char st [String]

711 :デフォルトの名無しさん:2012/06/08(金) 23:29:23.43
STate(状態)って意味の仮引数名でしょ。
parsecがstate monadなのは理解できてるの?

712 :デフォルトの名無しさん:2012/06/08(金) 23:34:29.64
>>711
そもそもParsecってStateMonadなの?

713 :デフォルトの名無しさん:2012/06/08(金) 23:36:06.48
使わないから知らないけど、hackage見る限りそのParsecは古いんじゃない?最新だとそんな型ないよ

さておき、
http://hackage.haskell.org/packages/archive/parsec/2.1.0.1/doc/html/src/Text-ParserCombinators-Parsec-Prim.html#line-126
を読むと
newtype GenParser tok st a = Parser (State tok st -> Consumed (Reply tok st a))
となっており、 つまり State型に渡す型引数だ。 (Replyの引数も最終的にState型に渡っている)
パーサーにユーザ定義の状態を持たせたいときに、このst型に具体的な型を代入して使う。

状態は
getState :: GenParser tok st st
で得られ
setState :: st -> GenParser tok st ()
で更新できる。

こんなところかな?
本当はソースでなくParsecのマニュアルを読むのがいいと思うけどとりあえず


714 :デフォルトの名無しさん:2012/06/08(金) 23:37:33.72
でこのソース読むと OkのときStateが帰るからStateモナドといってよいと思う。
あるいはErrorTとStateを組み合わせて同じものを作ってみるのも良いかも

715 :デフォルトの名無しさん:2012/06/08(金) 23:41:09.72
というか仮引数のままでいいのか…

716 :デフォルトの名無しさん:2012/06/08(金) 23:43:06.83
それが多相性なのでしょう

717 :デフォルトの名無しさん:2012/06/08(金) 23:47:17.97
>>714 ErrorTとStateでは作れないなー StateTとEitherかな?

718 :デフォルトの名無しさん:2012/06/09(土) 01:19:41.25
>>716
パーサのstの部分って、パーサを作ってる段階じゃ何が入るか分からないの?


719 :デフォルトの名無しさん:2012/06/09(土) 13:48:13.74
たとえば
f :: GenParser tok st ()
という関数があったら、st の部分に何が入っても f を使える、ということ(多相性)
逆にいえば、 f 自身は、 st に何が入ってるか知らない(中身を触れない)

720 :デフォルトの名無しさん:2012/06/09(土) 14:02:28.81
>>719
パーサがパースしてる最中に f を何度もいろんな使い方するってことか

721 :デフォルトの名無しさん:2012/06/09(土) 15:44:48.67
reactive-banana って reactive のラッパーかと思ってて
ずっと手を付けなかった自分を殴りたい

722 :デフォルトの名無しさん:2012/06/09(土) 16:30:44.77
>>720 というより「stの型にかかわらずどんなパーサーでfを使える」という感じ

一つのパーサーの実行途中でstの型が変わることはない。
1+1+1 という式が → 2+1 → 3 と計算される途中でString型に変わったりしないのと同じ

723 :デフォルトの名無しさん:2012/06/09(土) 19:32:42.81
さらにreactive-banana-baconというのもありまして
これもreactive-bananaの単なる追加パッケージかと思いきやreactive-bananaに依存しないまったく別の実装だったりする

724 :デフォルトの名無しさん:2012/06/09(土) 20:14:18.18
banaan とか bacon とか名前適当すぎワロタ

725 :デフォルトの名無しさん:2012/06/09(土) 20:21:25.86
ばなーん

じゃなくて

ばなな

726 :デフォルトの名無しさん:2012/06/09(土) 20:22:18.09
商標とかぶるとめんどくさいから適当な名前が増えるのかも

727 :デフォルトの名無しさん:2012/06/09(土) 20:43:29.82
俺もなんかつくって reactive-chikuwa とか名前付けようかな

728 :デフォルトの名無しさん:2012/06/09(土) 21:26:25.15
あぁ、あれですね
ゲーム作る前に名前から決める奴

729 :デフォルトの名無しさん:2012/06/09(土) 21:41:08.79
あるあるー

730 :デフォルトの名無しさん:2012/06/09(土) 22:03:24.18
作業用ディレクトリにhogeとかunkoとか適当な名前のプロジェクトが沢山ある

731 :デフォルトの名無しさん:2012/06/09(土) 22:03:40.31
ここってこんなにまったり雑談スレだったっけ

732 :デフォルトの名無しさん:2012/06/09(土) 22:12:23.17
>>731
爆弾でもいいから Haskell 関連の話題を投下してくれ

733 :デフォルトの名無しさん:2012/06/09(土) 22:33:37.62
happyで生成したGLRパーサコードがコンパイルエラーになる件はいつ解消されますか?

734 :デフォルトの名無しさん:2012/06/09(土) 22:39:55.15
>>733
きみが作者にバグフィクスを送ったら改善される

735 :デフォルトの名無しさん:2012/06/09(土) 23:57:31.71
ということで雑談スレに戻るぜ

736 :デフォルトの名無しさん:2012/06/10(日) 00:37:05.38
RecordWildCards壊れた?

737 :デフォルトの名無しさん:2012/06/10(日) 05:58:46.12
>>736
きみが作者にバグフィクスを送ったら改善される

738 :デフォルトの名無しさん:2012/06/10(日) 10:13:28.94
同じギャグを2度続けられるとウザイ

739 :デフォルトの名無しさん:2012/06/10(日) 13:13:07.99
>>736 ghc7.4でも使えると思うけど、何か問題があった?

740 :デフォルトの名無しさん:2012/06/10(日) 15:48:54.30
>>739
時々こんなメッセージでコンパイラが落ちる
*** Exception: compiler\rename\RnPat.lhs:535:39-79: Irrefutable pattern failed for pattern gres@(gre : _)
まあぐぐってみたら普通に既知みたいだが・・・

741 :デフォルトの名無しさん:2012/06/10(日) 16:04:16.67
これか… http://hackage.haskell.org/trac/ghc/ticket/5892

742 :デフォルトの名無しさん:2012/06/11(月) 20:38:55.48
上でSICPが話題になってたから
読んでみたら本当に糞訳すぎて噴いたわw

743 :デフォルトの名無しさん:2012/06/11(月) 20:39:56.97
しかしこれは本当に酷い訳だわ
擁護しているの関係者としか思えん

744 :デフォルトの名無しさん:2012/06/11(月) 21:21:11.52
reactive-banana のチュートリアルって HaskellWiki のしかないですか?
サンプルじゃなくてチュートリアルです

745 :デフォルトの名無しさん:2012/06/11(月) 21:35:14.31
>>744
stackoverflowより
http://stackoverflow.com/questions/9210412/recommended-reading-tutorials-to-understand-reactive-banana-frp-library

746 :デフォルトの名無しさん:2012/06/12(火) 07:35:26.82
>>745
ありがとうございます。

なるほど、まだ変動的だからちゃんとしたチュートリアルは作れないのですね。
作者のブログやstackoverflowの記事を参考にてみます。


747 :uy:2012/06/12(火) 13:27:06.82
HaskellってEsoteric programming language
じゃなければただのバカだよね

748 :デフォルトの名無しさん:2012/06/12(火) 20:41:36.15
Erotic Programming Language に見えた。

749 :デフォルトの名無しさん:2012/06/12(火) 21:16:42.69
アポカリプティブ・ファンクター

750 :デフォルトの名無しさん:2012/06/12(火) 21:18:38.03
catastrophic morphism

751 :デフォルトの名無しさん:2012/06/13(水) 12:41:17.14
質問

reactive-banana って、時間の概念は直接表には出てこないんだよね。
同時に発生したイベントの union はどちらが先に起こったことにするかとか、
その程度の間接的な扱いしかできない。

例えば、sin(アプリ開始からのt秒) という値を持つビヘイビアが作りたいなら、
現在時間を値に持つイベントを作り、それを自分のイベントループの中で毎回発火させ、
そのイベントからビヘイビアに変換させるのが普通なのかな。

reactive パッケージの time みたいに、時間のビヘイビアを直接得る方法はないの?

752 :デフォルトの名無しさん:2012/06/13(水) 19:43:49.70
>>751
ないから作るしかない。
IOモナドからBehavior作るfromPollって関数があるからそれ使えばいいと思う。

753 :デフォルトの名無しさん:2012/06/13(水) 20:31:56.94
>>752
やっぱり、そういうことなのね。

FRP と一言で言っても、いろいろな設計思想があって面白いな。

754 :デフォルトの名無しさん:2012/06/14(木) 17:47:08.09
お前らなんでも知ってるなぁ
一日中Haskellでもやってんの?

755 :デフォルトの名無しさん:2012/06/14(木) 17:54:59.06
Haskellで何か作っていたり、Haskellの応用を身につけようとすると
むしろHaskell以外の方がやること多くないか。

756 :デフォルトの名無しさん:2012/06/14(木) 22:02:09.61
入門書買ったので、早速ダウンロードして使おうと http://hackage.haskell.org/platform/ に
アクセスしたのですが繋がりません。ひょっとしてうちだけ?

757 :デフォルトの名無しさん:2012/06/14(木) 22:05:48.05
http://www.haskell.org/haskellwiki/Mailing_lists#Archives とかで最近の
投稿見てもサイトダウンとか何も触れてないし……

758 :デフォルトの名無しさん:2012/06/14(木) 22:06:37.28
俺はつながるぞ
ところで入門書は何買ったん?

759 :デフォルトの名無しさん:2012/06/14(木) 23:03:05.31
前もいた、気がするな。
ネットワークの設定の影響だと思うが。

http://d.hatena.ne.jp/sirocco/touch/20110905/1315255573

760 :デフォルトの名無しさん:2012/06/14(木) 23:19:43.98
つまりIPv6が悪さしてると

761 :756:2012/06/15(金) 00:29:58.76
入門書はオーム社の「すごいHaskell たのしく学ぼう!」です。
hackage.haskell.orgはDNSは引けてるみたいなんですが(69.30.63.204)
pingが通らないです。traceroute すると10hop目位から先行けないようです。
端末はMac OS X LionでIPv6も有効になっちゃってますがv4アドレス直指定でも
ping/tracerouteが通らないので、ネットワーク側の問題と思われたのですが……
と、これ以上は板違いなので控えます。今度くる時はHaskellの話題で。

762 :デフォルトの名無しさん:2012/06/15(金) 00:49:53.85
macだったらbrewでGHCをインストールすればいいyp

763 :デフォルトの名無しさん:2012/06/15(金) 00:55:54.91
はい、MacPortsでインストール中です。

764 :デフォルトの名無しさん:2012/06/15(金) 07:43:46.13
>>761
以前、つながらないと言っていた者です。

プライベートアドレスを割り振ってるところではつながらない可能性があるみたい。
ルーターの問題なのかな?(IPv6に対応していない?) 詳しくはわかりません。

自分のマンションも、プライベートアドレスが割り当てられてて、つながらないです。
自分の場合は、適当なプロキシを指せばつながります。

765 :デフォルトの名無しさん:2012/06/15(金) 16:10:08.91
(接続しているISPも含めて)IPv6使える環境じゃないのに、
IPv6を有効にしている/有効になっているクライアントが悪い。

766 :デフォルトの名無しさん:2012/06/15(金) 16:49:05.30
ネットワーク系のプログラムは全部IPv6無効にしてコンパイルし直してるわ

767 :デフォルトの名無しさん:2012/06/16(土) 16:11:25.13
文字列が数字として読み取れるならその数値を返す
f :: String -> Maybe Integer のような関数は標準ライブラリにありましたっけ?

768 :デフォルトの名無しさん:2012/06/16(土) 16:59:24.76
reads だね。効率は非常に悪いけどとりあえず使える

769 :デフォルトの名無しさん:2012/06/16(土) 19:20:54.00
リワハ読んだ後に進むべき書籍を教えて

770 :デフォルトの名無しさん:2012/06/16(土) 19:26:51.24
>>769
Real World Haskell の次は、実際にプログラムを書くとかソースを読むとかすればいいと思う。

771 :デフォルトの名無しさん:2012/06/16(土) 19:27:56.57
ハロワ行った後に進むべき書籍を教えて

772 :デフォルトの名無しさん:2012/06/16(土) 19:43:24.68
>>768
Maybe ではないけど、指定した型の数値に変換できなければ
空リストが返ってくるってことね

ありがと

773 :デフォルトの名無しさん:2012/06/16(土) 19:46:55.65
リワハ読んだ後に読むべきソース教えて

774 :デフォルトの名無しさん:2012/06/16(土) 20:43:35.03
>>773
目的は何?

775 :デフォルトの名無しさん:2012/06/16(土) 21:37:29.24
>>774
揺るぎなき基礎力です

776 :デフォルトの名無しさん:2012/06/16(土) 22:44:49.44
>>769
規格書読めば?

777 :デフォルトの名無しさん:2012/06/16(土) 23:46:34.01
>>775
揺るがなくなるまで再帰的にリワハ読んでろ

不動点だ

778 :デフォルトの名無しさん:2012/06/17(日) 01:58:40.62
>>777
ワロタ

779 :デフォルトの名無しさん:2012/06/17(日) 16:28:05.35
>>773
RWHに練習問題や研究課題が載ってるからそれを解いてみればいかがでしょうか

780 :デフォルトの名無しさん:2012/06/17(日) 20:01:54.89
ハスプラバージョンアップの度に
自分で入れてたライブラリ再ビルド・インストール(´・ω`・)メンドクセ

781 :デフォルトの名無しさん:2012/06/17(日) 20:05:54.82
>>780
ようこそデビアンへ!

782 :デフォルトの名無しさん:2012/06/17(日) 21:51:22.26
ブルームフィルタ用ライブラリはどこですか?

783 :デフォルトの名無しさん:2012/06/17(日) 22:24:24.58
リワハって何か思った。ハロワを皮肉ったのかと思ってたよ。

784 :デフォルトの名無しさん:2012/06/17(日) 22:50:35.17
>>782
君の環境からは HackageDB のページは見れないのですか?

785 :デフォルトの名無しさん:2012/06/17(日) 22:56:47.89
× 見れない
○ 見られない

786 :デフォルトの名無しさん:2012/06/17(日) 23:03:27.35
>>785
ご指摘ありがとうございます。

787 :デフォルトの名無しさん:2012/06/17(日) 23:04:22.65
>>784
ネカフェでダウンロードしてきたArchive.tarならあります

788 :デフォルトの名無しさん:2012/06/17(日) 23:12:04.96
>>787
それがどういう状況なのか今ひとつ分りませんが、
要するに君の今の環境では HackageDB にアクセスできないのですね。

それは残念です。
せっかく HackageDB に bloomfilter パッケージがあるのに使えませんね。

789 :デフォルトの名無しさん:2012/06/17(日) 23:18:52.02
ネカフェでArchive.tarわろたw マジレスするとそいつを展開すればbloomfilter出てくるのでは

790 :デフォルトの名無しさん:2012/06/17(日) 23:19:26.92
>>788
そこに飛んで下の方にあるarchive(238MB)をダウンロードして帰ってきました

ここに全部入ってるわけではないのですか?

791 :デフォルトの名無しさん:2012/06/17(日) 23:33:50.72
>>790
私は >>788 のレスの通り Archive.tar の意味するところが分っていません。
私に分っているのは HackageDB に bloomfilter パッケージがあるという事だけです。

私よりも >>789 の方が詳しそうです。

792 :デフォルトの名無しさん:2012/06/17(日) 23:34:17.37
オープン2chにもHaskellスレあったね。

793 :デフォルトの名無しさん:2012/06/17(日) 23:35:16.07
むむむ

794 :793:2012/06/17(日) 23:55:34.53
自己解決しました
bloomfilter-1.2.6.8.tarですね

7-ZIPにファイル名検索機能があれば見落とさなかったんですが

795 :デフォルトの名無しさん:2012/06/18(月) 07:48:44.23
誰か794にインターネット接続環境をあげてください;_;

796 :デフォルトの名無しさん:2012/06/18(月) 12:08:53.25
鳩をプレゼントしたいです。

797 :デフォルトの名無しさん:2012/06/18(月) 12:37:28.05
reactive-banamaって、n個前のタイミングのイベントの値を取ることはできんの?

たとえば、現在時刻を値として持つイベントがあって、
トリガーされる毎に前回のイベントとの差分値、つまり経過時間を得るとか。


798 :デフォルトの名無しさん:2012/06/18(月) 18:27:10.79
AddHandler [a]みたいな型をもつものからfromAddHandlerする、つまりイベントネットワークの外側で状態を扱うしか無いのかな
勿論この通りにリストで履歴を保持なんてしてたらメモリが溢れちゃうから、適当にリングバッファみたいな仕組みで扱うことになるだろうけど
elereaだとstateful一発なんだけどね

799 :798:2012/06/18(月) 18:39:06.10
サンプルコード
http://hpaste.org/70102

800 :デフォルトの名無しさん:2012/06/18(月) 18:56:10.75
一応mapAccumを使えばコンビネータの枠組みの中でイベントを遅延させる関数は作れる。

delay :: a -> Event a -> Event a
delay x e = fst $ mapAccum x $ (\cur prev -> (prev, cur)) <$> e

イベントをe = [1, 2, 3, ..]とすると
delay 0 e = [0, 1, 2, 3, ..]
って感じになる。
これを少し改造してキューにすればN個前のイベントの値を取ることもできる。
もしくは非効率かもしれないけど、
delayN [] = id
delayN (x : xs) = delay x .delayN xs
とすれば同じものが作れる。


まぁでも、reactive-bananaはいくら初心者向けに機能を絞ってると言っても、
コンビネータが足りなすぎて正直おもちゃの域を出ないのが俺の印象…。

801 :798:2012/06/18(月) 19:37:31.91
>>800
なるほどdelayか

reactive-bananaではaccumBがdelay相当のようだからそれを使って
あとvectorをリングバッファ代わりに使った
http://hpaste.org/70102

802 :デフォルトの名無しさん:2012/06/19(火) 00:15:08.78
みんなHaskellで何作ってるの?

803 :デフォルトの名無しさん:2012/06/19(火) 01:02:18.40
Haskell

804 :デフォルトの名無しさん:2012/06/19(火) 01:03:01.83
トレードボット

805 :デフォルトの名無しさん:2012/06/19(火) 01:45:23.64
>>802
まえはシミュレーションに燃えてたけど、燃え尽きてしまった。

806 :デフォルトの名無しさん:2012/06/19(火) 01:48:00.32
>>802
仕様からCのコードのスケルトンとユニットテスト用のコードを自動生成するプログラム


807 :デフォルトの名無しさん:2012/06/19(火) 08:48:16.25
入門書の定番は「すごいHaskellたのしく学ぼう」に定まった感があるな。
内容も翻訳も素晴らしい。

808 :デフォルトの名無しさん:2012/06/19(火) 15:42:36.62
ステマはやめてください
(><)
(⊃⊂)

809 :デフォルトの名無しさん:2012/06/19(火) 17:17:31.00
勝手に定めんな
また変なのが湧くぞ

810 :デフォルトの名無しさん:2012/06/19(火) 18:14:06.06
Vector Von Doom を 3次元ベクトルというタイトルにしたから
全然ダジャレが翻訳されておらず、要するに翻訳の質が低い。

811 :デフォルトの名無しさん:2012/06/19(火) 18:23:54.24
ほら…

812 :デフォルトの名無しさん:2012/06/19(火) 18:47:57.72
>>798 >>800
ありがと。

本質的に異なる方法でもいくつかあるんだね。
アドバイスを受けて色々試してみたけど、
求めていた挙動はとりあえず実現できる事が分ってよかったよ。

ただ、バージョンが 0.6 なせいか、
>>800 の言うようにまだまだコンビネータが足りないね。
今回の質問の件も、できなくは無いという感じで、無理矢理感は拭えない。
reactive を参考にしてるのなら、1.0 までには取り入れてくれるといいな。
(参考元は開発が止まってるようだけど)


813 :デフォルトの名無しさん:2012/06/19(火) 19:02:48.68
勉強会で「このおっさん誰」とか言ってたが、たまたまFPSジジイが著者と
レビュアーにいなかった、ってだけじゃないかw

814 :デフォルトの名無しさん:2012/06/19(火) 19:25:31.47
新しいハスプラ入れる時は
前のはアンインストールしといた方が良いですか?

815 :デフォルトの名無しさん:2012/06/19(火) 19:32:08.81
すごいHaskell たのしく学ぼう!は入門書じゃないね。
プログラミング初心者だがほとんど理解できなかったわ。

816 :デフォルトの名無しさん:2012/06/19(火) 19:36:43.89
>>815
そもそも Haskell がプログラミング初心者が学ぶ言語じゃない。

たしか、[言語設計者たちが考えること] って本で、
Haskell 委員会の一人も言ってた気がする。

817 :デフォルトの名無しさん:2012/06/19(火) 19:59:23.24
>>816
本当のプログラミング初心者なら問題ないと思う
Haskellの理解が難しいのは他言語の知識があるからだと思う

818 :uy:2012/06/19(火) 20:23:54.77
違うよ
元々関数型は覚えにくい

そしてオブジェクト指向をするからさらに覚えにくくなる

先入観がなくても初心者は関数型なんて覚えられない

819 :デフォルトの名無しさん:2012/06/19(火) 20:25:45.41
OCamlで学ぶプログラミング入門書があるから、「関数型は覚えにくい」とも言い切れない

820 :デフォルトの名無しさん:2012/06/19(火) 20:41:10.97
>>818
Haskellの理解にオブジェクト指向の理解は必須じゃない

関数型も、他言語みたいな関数をしらなければ、「関数の関数」と説明すれば理解できると思う

821 :デフォルトの名無しさん:2012/06/19(火) 20:50:16.55
>>818
> そしてオブジェクト指向をするからさらに覚えにくくなる

ちょっとびっくりした。


822 :デフォルトの名無しさん:2012/06/19(火) 20:57:33.35
>>821
アグネスキタ━━(゚∀゚)━━!!!

823 :デフォルトの名無しさん:2012/06/19(火) 21:08:56.60
>>810
必死で実例探してコレなのか。 ご苦労様です。

824 :デフォルトの名無しさん:2012/06/19(火) 22:15:40.67
Haskell Platform 2012.2.0.0

意図: ライブラリ(iconv-0.4.1.0)のインストール
runghc Setup.hs configure --user


Setup.hs: D:\Program Files\Haskell Platform\2012.2.0.0\Win32-2.2.2.0\HSWin32-2.2.2.0.o: unkown symbol `_GetProcessId'
Setup.hs: unable to load package `Win32-2.2.2.0'



解決法を教えてください

825 :824:2012/06/19(火) 22:18:34.53
Windows2000 Professional SP4です

ユーザアカウントでログインしてます

826 :デフォルトの名無しさん:2012/06/19(火) 22:46:52.20
2000は未サポートなのでXPにするんだ

827 :デフォルトの名無しさん:2012/06/19(火) 23:34:08.40
:(;゙゚'ω゚'):未サポートだったの?……

828 :デフォルトの名無しさん:2012/06/20(水) 00:31:07.25
あきらめてubuntuにでもするんだな。

829 :uy:2012/06/20(水) 02:03:43.51
>>820,821
俺はお前ら2人の理解力のなさにびっくりだよ

>>817 にレスして先入観について言ってんだから
「オブジェクト指向をする」というのは他言語でって意味にしか見えないだろがアホか

830 :デフォルトの名無しさん:2012/06/20(水) 02:30:34.18
>>818
>先入観がなくても初心者は関数型なんて覚えられない

いちいち手続き型とかの経験や知識が前提としてないと覚えられない、使えない
って関数型言語って不便極まりないんだな。

831 :デフォルトの名無しさん:2012/06/20(水) 05:13:46.86
>>829-830
本当のプログラミング初心者なら問題ないと思う
Haskellの理解が難しいのは他言語の知識があるからだと思う


832 :デフォルトの名無しさん:2012/06/20(水) 06:20:54.05
初心者かどうかは関係無い
ただし


        馬鹿には無理

833 :デフォルトの名無しさん:2012/06/20(水) 06:42:48.81
>>828
ステマすんな

834 :デフォルトの名無しさん:2012/06/20(水) 07:10:13.65
独学する人にとっては他言語の知識は無害だよ
教える側が、その言語を知らないと対応できなくなるのが辛いだけ

835 :デフォルトの名無しさん:2012/06/20(水) 07:11:13.32
プログラミング初体験の奴が Haskell でどうやってモチベーションを維持するか。
それが肝になるような気がする。

836 :デフォルトの名無しさん:2012/06/20(水) 08:38:53.84
>>831
それ判る!
プログラミング初心者(1年くらいです)だけど、c、Javaみても何て言うか実行までの約束事が多くてピンと来なかった。
Haskellの後、Lisp、Ruby、Java、cと見ていってようやく判ったのは、最初から抽象度の低い言語ばかり使うと、コーディングは出来るけど、プログラミングの概念が育たないという事。
このあたりは数学にも似ている。
と言っても、cとかが駄目なわけじゃない。
現実の物理構成に依存した部分は誰かが作る必要がある。

現実に対処するための部分と、本来やりたいことを実現するための戦略とを同時に学べればよかったんだが、自分の知る限り、そういうカリキュラムとかテキストが見つからない。

837 :デフォルトの名無しさん:2012/06/20(水) 11:36:29.49
>>836
>コーディングは出来るけど、プログラミングの概念が育たないという事。

プログラミングとは、と屁理屈ばっかり捏ねて仕事が出来ないバカよりは
よっぽどそっちの方がいいけどな。

838 :デフォルトの名無しさん:2012/06/20(水) 11:53:14.18
そういう下らん言い訳を書き込んでる馬鹿は何も生み出さないよね

839 :デフォルトの名無しさん:2012/06/20(水) 13:14:36.23
Cでコーディングしか学べないって、見識が低すぎやしないか。
Haskellの方が簡単できることもあるし、逆もある。

Haskellだとライブラリの利用==オレオレDSLの理解だったりするから困る。

840 :デフォルトの名無しさん:2012/06/20(水) 13:42:24.95
MLの(ミルナー先生の?)「Meta Language」っていう認識は卓見だよな。
確かに静的に強く型付けされていて、型関係の機能が豊富な言語は、
言語を作るためのメタ言語、っていう感じがある。

841 :827:2012/06/20(水) 15:50:10.46
駄目だな。しょうがない。
このWin32ライブラリの不具合は時期リリースで治る事を期待して
今しばらくは2011.4.0.0で耐え難きを耐え、忍び難きを忍ぼう

842 :827:2012/06/20(水) 16:50:22.00
と思ったら昔遊びでビルドしといたcabal.exeが使えた!
こいつでインストールできたわ
これで勝つる!

843 :uy:2012/06/20(水) 18:30:28.57
>>831
バカは他人に教えることもバカだからな

844 :デフォルトの名無しさん:2012/06/20(水) 18:55:54.35
あ、馬鹿のうyだ

845 :デフォルトの名無しさん:2012/06/20(水) 21:51:38.74
>>837
プログラミングの現場では、仕事ができるバカが一番有害
CやJavaはプログラミングの知識が乏しくても、ネットのコードを切り貼りするだけで、キチンと速く動くプログラムを大量に作ることができる
当然、保守などできない

一方、Haskellは、あるていど知識の閾値を超えていないと、マトモに動くプログラムを作れないので安心

846 :デフォルトの名無しさん:2012/06/20(水) 22:06:08.33
Elerea の SignalGen の概念が今ひとつ分らない。

他の FRP(たとえば reactive など)で似たような概念のものってある?

847 :デフォルトの名無しさん:2012/06/20(水) 22:10:17.57
reactiveにはない。sodiumにはある(Reactiveモナド)

SignalGenは要するにIOみたいな物だと思えば良いと思う
delayとか、実行するタイミングによって結果のシグナルが異なる関数は、
純粋関数にはなれないからSignalGen上で走る

848 :デフォルトの名無しさん:2012/06/20(水) 22:21:41.37
sodiumのReactiveって、reactiveでいうReactive (value)とはまた別物なの?

849 :デフォルトの名無しさん:2012/06/20(水) 22:25:22.31
>>847
すまん、質問が曖昧すぎた。

「そうやって使うものだ」という事は分ってる(つもりな)んだ。
要するに、ステートフルなシグナルは SignalGen で、ってことなんだろ?
(まぁライブラリの data SignalGen a の説明に書かれている事の受け売りだが)

そういう「使い方」と、signal "generator" という名前で表される「概念」
との繋がりがよく分らないんだ。

単にIOみたいなシグナル、シグナルのステートフル版なら、
SignalIO とか StatefulSignal とかでも良いと思うんだ。

generator って、何を generate するんだろ?

そんなの本当のところは作者にしか分らんのかも知れんが、
それが分る、というか合点がいくと、Elerea を上手に使えるような気がする。

850 :デフォルトの名無しさん:2012/06/20(水) 22:34:09.71
>>849
SignalGenはシグナルのステートフル版じゃないよ
elereaではステートフルでもステートレスでもシグナルの型はSignal
違いは、ステートレスなシグナルは純粋な関数で構築される
例: pure :: a -> Signal a
のに対して、ステートフルなシグナルはSignalGen上のmonadicな関数で構築されること
例: delay :: a -> Signal a -> SignalGen (Signal a)

シグナル生成関数(delayとかtransferとか)が動作する舞台だからSignalGenって名前なんじゃね

851 :デフォルトの名無しさん:2012/06/20(水) 22:43:22.53
>>848
別物
reactiveのreactive valuesに対応するのはsodiumのBehaviorだと思う
(sodiumのBahaviorは連続的に変化できない)

852 :デフォルトの名無しさん:2012/06/20(水) 23:15:18.70
>>850
使い始めてまだ数日(時間にすれば数時間もない)だから、
正直言ってそれでもまだモヤモヤするのだが・・・

シグナル生成関数が動作する舞台というのは、
なんとなくイメージし易いと思った。

なるほどね、「シグナルを生成するもの」ではなくて「舞台」か。
今まで考えた中では一番しっくりきた。

853 :デフォルトの名無しさん:2012/06/20(水) 23:55:03.17
もうひとつ質問なんだが、Elerea のライブラリドキュメントの
data SignalGen a の項目に

The conceptual difference between the two notions is that
signals are passed a sampling time, while generators expect a start time
that will be the creation time of all the freshly generated signals
in the resulting structure.

とあるんだが、後半 generator の方の説明の that will be 以降はどういう意味なの?

Signal との大きな違いを説明している大事なところなのに、よく分らない。


854 :デフォルトの名無しさん:2012/06/21(木) 02:12:44.06
signals はサンプリングタイムを伝播するが、
generators はすべての新しい signals が生成されたときにスタートする


855 :デフォルトの名無しさん:2012/06/21(木) 07:04:59.09
>>853
たとえば、

gen :: SignalGen (Signal Int)
gen = do
  x <- stateful 3 (+2)
  y <- delay 0 x
  return y

みたいなSignalGenがあったとする。概念的にはこれは時刻を取ってシグナルを返す関数と思える
で、その時刻をどうするかというと、genで新たに生成されるシグナル(この例だとxとy)の
作成時刻(creation time)として使う、というのがthat will be...の意味
つまり、genを時刻t0で呼べば、xやyは時刻t0に作成されたことになるってこと

856 :デフォルトの名無しさん:2012/06/21(木) 07:21:56.18
そうかWin32パッケージの上に色々入ってるのか
Win32パッケージ入れ直したらそれを頼りとするパッケージも全部入れ直しになるのか

拷問だろ

857 :uy:2012/06/21(木) 15:24:58.56
バカな言語使っているのが悪いとしか

858 :デフォルトの名無しさん:2012/06/21(木) 16:26:43.44
モナドがちゃんと分かっていればIOもStateもParsecもすぐ使えるようになるのかな。

859 :デフォルトの名無しさん:2012/06/21(木) 16:48:27.65
ノマドワーカーを言い間違えてモナドワーカーとか言ったらなんかヤバそうな感じする.


860 :デフォルトの名無しさん:2012/06/21(木) 17:28:14.86
アースモーナッド

861 :デフォルトの名無しさん:2012/06/21(木) 18:17:08.28
>>840
もともと定理照明系を記述するための言語。

862 :デフォルトの名無しさん:2012/06/21(木) 18:50:18.60
そうそう、定理をピカーッと照らしてくれるんです。

863 :デフォルトの名無しさん:2012/06/21(木) 19:10:59.98
最強のメタ言語は機械語だろ。
大概のプログラミング言語は機械語上に構築された処理系で動作する。

864 :デフォルトの名無しさん:2012/06/21(木) 19:22:09.76
>>863
たぶんわざとだとは思いますが、
メタ言語(メタプログラミングのことですよね)の意味を
何か別のものと取り違えているように思えます。

865 :デフォルトの名無しさん:2012/06/21(木) 19:52:28.58
チューリング完全な言語なら一方で他方をエミュレート出来るのは自明なのに
機械語を特別視する>>863はアホの鏡だな

866 :デフォルトの名無しさん:2012/06/21(木) 20:07:39.99
s/鏡/鑑/

867 :デフォルトの名無しさん:2012/06/21(木) 20:19:16.73
自演乙
チューリング機械は同型を除いて一意的にしか定まらないと言いたいだけだな。

868 :デフォルトの名無しさん:2012/06/21(木) 20:40:51.78
>>864 これも >>863 がわざとだといいつつこれがわざとだな
メタ言語による対象言語のプログラミングが
(対象言語にとっての)メタ・プログラミングだから機械語が最強のメタ言語とか、
言いたいだけだろ。

869 :uy:2012/06/21(木) 20:54:34.75
予の口を動かし罵倒するに足りるクズはまだか.

870 :デフォルトの名無しさん:2012/06/21(木) 21:06:47.49
>>869
もうだまされないぞー。

871 :デフォルトの名無しさん:2012/06/21(木) 21:08:59.80
>>868
metaの意味わかってねえ…

872 :デフォルトの名無しさん:2012/06/21(木) 21:16:49.41
>>871
わからないので解説してくれ。

873 :デフォルトの名無しさん:2012/06/21(木) 21:35:02.29
>>872
○○を構築する□□があるとき、□□を構築するモノをメタという

プログラミングをする人間がいるとき、人間をつくるセックスをメタという

874 :デフォルトの名無しさん:2012/06/21(木) 21:43:24.02
メタはモノのことじゃない。上位の行為につける冠詞だ。


875 :デフォルトの名無しさん:2012/06/21(木) 21:46:16.47
>>873
それだけじゃメタにならないでしょ

高次や高階の意味がそこには含まれていない

876 :デフォルトの名無しさん:2012/06/21(木) 21:55:35.64
>>874
接頭辞と言いたいのか?

今は形容詞的利用が多いけど。

877 :デフォルトの名無しさん:2012/06/21(木) 22:00:30.01
>>874
それは間違い
理由は、メタを分析したら、高次とか高階にあると思ってたけど実は同じレベルだったということが往々にしてあったから

だから、メタは「構成法」でしか定義できない

878 :デフォルトの名無しさん:2012/06/21(木) 22:07:14.01
そう接頭詞。構成法とかはどうでもいい。
「メタ」という用語で最も言いたいところは「上位」の観点があるというところだ。
何かを管理する場合は、何かその管理されるものにとって上位の存在じゃないと
管理ができない。

879 :デフォルトの名無しさん:2012/06/21(木) 22:21:15.22
どうでもいいと言ったが、>>877 の実は同じレベルになる例としては、
自分の小遣い帳をつける行為は自分の行為を管理するメタな行為で
あるが、小遣い帳をつける行為は自分の行為なので実は同一レベルの行為。
しかし、小遣いを使う行為に対してはメタなのでメタである。

880 :デフォルトの名無しさん:2012/06/21(木) 22:30:10.42
Haskellの言語仕様は英語で書かれているから、英語はHaskellのメタ言語

という感じ?

881 :デフォルトの名無しさん:2012/06/21(木) 22:31:55.82
予想したり批評したりするのが上
黙って結果を出すのが下

882 :デフォルトの名無しさん:2012/06/21(木) 22:39:58.96
英語でHaskellをHasellというモノとして扱っていれば、Haskellというモノに対してメタ。

「予想したり批評したりする」というくくりでそれを上に結びつけている行為は
予想したり批評したりしている奴にとってメタ。
同じく「黙って結果出す」というくくりを下と結びつける行為は
黙って結果出している奴にとってメタ。

883 :デフォルトの名無しさん:2012/06/21(木) 22:43:06.21
C言語にとって関数はモノじゃない。けれどそのC言語のコンパイラを記述している
言語にとってC言語の関数はモノ。

884 :デフォルトの名無しさん:2012/06/21(木) 22:45:14.73
あなたのライフはもう0よ

885 :デフォルトの名無しさん:2012/06/21(木) 22:46:57.69
ゼロでもなんでもいい。概念の習得なんて結局どんだけコストをかけたかだ。

886 :デフォルトの名無しさん:2012/06/21(木) 22:49:33.66
普通はメタ/オブジェクトと区別するがメタ/モノという表現は新鮮だな。
片方だけ訳していて一貫性はないがなんか面白い。

887 :デフォルトの名無しさん:2012/06/21(木) 22:53:00.99
オブジェクトという単語を使うと十中八九意味がブレる。対象もブレる。モノしかない。


888 :デフォルトの名無しさん:2012/06/21(木) 23:08:31.13
そもそもテクニカルターム使っていれば妥当なことを言っている
と思っているようなやつになりたくないわ。

889 :デフォルトの名無しさん:2012/06/22(金) 00:44:29.22
モノとエピ
どっちがどっちかいまだに迷う

890 :デフォルトの名無しさん:2012/06/22(金) 01:09:05.87
モノと単射の関係を理解できる人はたくさんいるが、エピと全射の関係を理解できる人は少ない


891 :デフォルトの名無しさん:2012/06/22(金) 02:31:33.22
俺はモナドって全く知らないはずなのにどっかで聞いたことあるなあと思ったら、
モナークモナークのことを覚えていたんだった。

892 :デフォルトの名無しさん:2012/06/22(金) 02:36:44.39
>>891
こんなところで油売ってないで新作出せよ。怒るぞ

893 :デフォルトの名無しさん:2012/06/22(金) 07:29:49.56
本日の圏論スレ

894 :デフォルトの名無しさん:2012/06/22(金) 13:55:34.45
>>824 KDW


895 :Perl忍者 ◆M5ZWRnXOj6 :2012/06/22(金) 17:00:28.04
つまらないやつばっかりだな
相変わらず

896 :デフォルトの名無しさん:2012/06/22(金) 20:11:43.92
>>895
こっちこいよhttp://toro.2ch.net/test/read.cgi/tech/1338365782/
uy が惨殺されたばかりでつまらんのだ。

897 :デフォルトの名無しさん:2012/06/22(金) 21:36:55.02
とりあえず自分が何を知りたいのかということをちゃんと知ることだ。
周りに流されたら流されたにふさわしい結果が待っている。
特に必要性のない知りたいわけでもないことを知ろうとしても意味が無い。

898 :デフォルトの名無しさん:2012/06/22(金) 22:01:24.88
なんか、上の方でちょこちょことelereaの話が出てて、
前から気になってたから、重い腰を上げてトライしてみることにした。



何から手を付ければいいのか分らない。
FRP経験はyampaでちょっと遊んだ程度なんだけど、あまりに違いすぎる。

優しく教えてくれるページとかって無い?

899 :デフォルトの名無しさん:2012/06/22(金) 22:02:54.42
ないから是非書いてくれ

900 :デフォルトの名無しさん:2012/06/23(土) 01:35:27.39
elerea-exampleのソースコードとかマジ意味不だよなぁ
なんであんなローカル定義使いまくるのやら・・・
相互再帰が必要なものは仕方ないとしても、せめて型注釈ぐらい書いてくれよと

901 :デフォルトの名無しさん:2012/06/23(土) 01:43:02.38
elereaってeventがないんだっけ
速攻で廃れそう
FRPを本気で使うのは、Haskellプラットホームに標準装備されてからにしよう


902 :デフォルトの名無しさん:2012/06/23(土) 09:28:37.15
つまり永遠に来ないと

903 :デフォルトの名無しさん:2012/06/23(土) 10:25:26.93
Eventが無くて廃れるとかお前それYampaの前でも言えるの?

904 :827:2012/06/23(土) 21:06:13.78
>>826
2000はサポート内じゃ?


それはそうとプラットフォーム辞めてGHC7.4.2の方も試してみたけど
やはりWin32パッケージで不具合出ました

905 :デフォルトの名無しさん:2012/06/23(土) 21:25:43.79
OSのサポートが終わってるのにサポート内のわけねー・・・と思ったが
GHCはまだ2000をサポートしてるんだな

でも、実際にはXP以降専用のAPIを使ってるみたいだ

906 :デフォルトの名無しさん:2012/06/24(日) 00:52:42.60
(.)を組み合わせて適用順序を変える感覚がいまいちピンと来ないんだけど、
なんかコツがあるのかね

907 :デフォルトの名無しさん:2012/06/24(日) 00:59:35.54
flip

908 :デフォルトの名無しさん:2012/06/24(日) 01:10:08.53
適用順序が変わったら定義域がおかしいことにならない?


909 :デフォルトの名無しさん:2012/06/24(日) 01:38:17.54
((.).(.))とかやって変態コーディングしてる人達の
頭の中が知りたいってことです

910 :デフォルトの名無しさん:2012/06/24(日) 02:33:01.42
アレはまぁイディオムみたいなもん。
パターンが色々あって、変態的なコーディングしてる人たちは色々知ってるってだけ。

(a1 -> b) っていう一引数関数の戻り値の型をcに変えたいよぉ
dot1 :: (b -> c) -> (a1 -> b) -> (a1 -> c)
dot1 = (.) -- ただの関数合成

(a1 -> a2 -> b) っていう二引数関数の戻り値の型をcに変えたいよぉ
dot2 :: (b -> c) -> (a1 -> a2 -> b) -> (a1 -> a2 -> c)
dot2 = (dot1 . (.)) -- = ((.) . (.))

(a -> b -> c -> d)っていう三引数(ry
dot3 :: (b -> c) -> (a1 -> a2 -> a3 -> b) -> (a1 -> a2 -> a3 -> c)
dot3 = (dot2. (.))

etc...

> let addShow = show `dot2` (+)
> addShow 1 2
"3"

参考はこの辺。
http://www.haskell.org/haskellwiki/Pointfree
http://wiki.haskell.jp/Old/sampou.org/cut-sea

俺は使わんけどな。

911 :デフォルトの名無しさん:2012/06/24(日) 05:17:34.49
>>909
こっち見んな

912 :デフォルトの名無しさん:2012/06/24(日) 10:32:56.12
すげー
感謝です

913 :デフォルトの名無しさん:2012/06/24(日) 10:36:14.58
おっぱいがいっぱい。

914 :デフォルトの名無しさん:2012/06/24(日) 10:41:01.63
おっぱいにしか見えない

915 :デフォルトの名無しさん:2012/06/24(日) 11:41:55.71
dotn n = (dotn (n-1) ) . (.)
なの?

916 :デフォルトの名無しさん:2012/06/24(日) 17:18:34.75
そういうこと。
まぁそういう関数は書けんけどね。
TH様に頼るしかない。

917 :デフォルトの名無しさん:2012/06/24(日) 17:54:28.67
これは、トリッキーなコードなのか、理論的に意味のあるコードなのか
ただ単にトリッキーなだけなら、仕様でできないようにしてほしい

初心者がネットからコピペしてコードに混ぜたら、保守するときに誰も理解できない

918 :デフォルトの名無しさん:2012/06/24(日) 17:57:57.25
「理論的に意味がある」「トリッキー」についてちゃんと定義して、提案してみたら?
まさか、定義不可能なものを「仕様にしてほしい」とか言ってないよね?

919 :デフォルトの名無しさん:2012/06/24(日) 17:58:28.41
>>917
理解できないコードなんて無いはずだ

時間はかかるが、簡約を勧めれば必ず理解できる

920 :デフォルトの名無しさん:2012/06/24(日) 18:34:24.18
>>918
トリッキーなコード
・可読性も生産性も保守性も発展性もなく、ただ単に「お前は知らないだろうけど、知ってる俺はすげーだろ」と言いたいがために用意されたようなコード
・過去においては意味があったかもしれないが、現在のマシン環境や理論では有用性が消失したのに、プログラマの話題の種のためだけに残ってるようなコード
・保守しているときに腹しか立たないコード

理論的に意味のあるコード
・プログラムとして読みにくくても、それを支える理論(誰もが確認できるテキスト等に記載された周知の知識)から考えると、冗長に記述するとかえって理解が悪くなるコード

921 :デフォルトの名無しさん:2012/06/24(日) 18:56:59.83
HaskellはPerlとか鼻で笑い飛ばせるレベルでTMTOWTDIを地で逝く言語だから諦めろ。

922 :デフォルトの名無しさん:2012/06/24(日) 19:38:03.84
他人のコード見ると、モナドの使い方が自分と全然違ったりして読むの辛い
仕事で使ってるとこはどうやってるんだろう?

923 :デフォルトの名無しさん:2012/06/24(日) 19:48:40.57
ポイントフリー、プログラム算法厨はどこに行っても嫌われる

924 :デフォルトの名無しさん:2012/06/24(日) 19:53:48.21
引数いっこの関数を次々と適用…くらいならポイントフリーで大丈夫だとは思う

925 :デフォルトの名無しさん:2012/06/24(日) 19:54:12.59
>>923
プログラム算法厨ってどんなの?

926 :デフォルトの名無しさん:2012/06/24(日) 20:04:54.79
>>920

>>918が言ってるのは要するに「与えられたソースコードにトリッキーなコードが含まれているかどうかを判定するプログラム」を書けってことだよ。

927 :853:2012/06/24(日) 20:37:05.55
>>854 >>855
ありがとう、レス遅くなってスマン。

ずっと考えてたんだが、正直いまいち理解できていない。
作成時刻というのが、なんか実装の辻褄合わせのために
無理矢理入れた概念みたいな感じを受ける。

あと、どうもそもそも Signal の意味をちゃんと理解できていないと思った。
discrete time FRP なんだから、Double -> a じゃなく Nat -> a なのは分るけど、
この Nat は離散「時間」というよりは「順番」や「番号」みたいなモノなのかな。

離散時間を明示的には扱えないのも、時間じゃないから?

へたに reactive や banana の知識があるせいか、
この辺りもやもやしてスッキリしないから論文を当たってみるわ。
(Efficient and Compositional Higher-Order Streams)

928 :デフォルトの名無しさん:2012/06/25(月) 00:44:11.39
>>926
C言語だとlintの派生みたいなツールでトリックコードやマジックナンバーを排除できるけど、Haskellのlintってそういうのはしてくれますかね?
一度使って警告出まくってからずっと触ってないけど


929 :デフォルトの名無しさん:2012/06/25(月) 06:13:24.04
>>917
諸葛亮の木牛流馬としてわざとライバル企業に盗ませる

930 :デフォルトの名無しさん:2012/06/25(月) 06:29:50.52
>>926
ソースコードから
それぞれの担当の功労度を割り出すプログラムを作れってこと?

931 :デフォルトの名無しさん:2012/06/25(月) 07:23:14.67
>>930
そういう意味ではないと思うよ。

>>917 は「仕様でできないようにしてほしい」と言っている。
この仕様というのは言語仕様だろうね。
(別のコンパイラなら通ってしまうのなら >>917 の希望は満たされないし)

仕様でできないようにするということは、
コンパイラがそのようなコードをエラーとして弾くということ。
トリッキーなのか、それ以外なのか、コンパイラが見抜けなければならない。

そのためには、トリッキーとは何かを
言語仕様として組み込める程度には詳細に定義する必要がある。
>>918 で言ってるのはそういう事だと思う。

>>920 のは、言語仕様として組み込むにはほど遠い定義だと俺も思う。

>>920 は定義の意味を取り違えているようなので、
>>926 で改めて、同じ意味の事を別の言葉で問い質したのだと思う。

言語仕様として組み込める程度に詳細な定義というのは、その定義をもとに、
そのような判断をするプログラムをコンパイラ実装者が作れるという意味だよ、と。

932 :デフォルトの名無しさん:2012/06/25(月) 07:56:40.89
>>917 が自分をサブリメーションして ghc に組み込まれれば全て解決

933 :デフォルトの名無しさん:2012/06/25(月) 11:18:01.61
>>927
順序を離散時間で表すのはかなり広範囲に使われているイデオムの一つ。
イベント、ストリーム、並列、分散などの分野で。
初期の有名なのはLaTeXのLamportさんのnetwork time(lamport's timestamp)。
1978年の論文だから、このスレの多くの人は生まれてないかもね。
明示的に離散時間が出てこなくても、イベントの生成にタイプごとに順序制約があって、
プロトコルに陰に含まれている場合もある。

Yampaは少し隠そうとしている。
Elereaは明示的に扱っている分、プリミティブを少なくできている。

934 :デフォルトの名無しさん:2012/06/25(月) 15:54:48.01
>>931
>>917はトリッキーなコード全てをエラーにして欲しいと言ってるんじゃなく、
>>910が一般的に見てトリッキーなら>>910をエラーにして欲しいってことだろ?
>>910を厳密に定義する必要はあるが、「トリッキーなコード」を厳密に定義する必要なんてどこにもない
根本的にズレてない?

935 :デフォルトの名無しさん:2012/06/25(月) 17:03:02.96
((.).(.))なんて定義通りの働きしかないんだからエラーにしろとかありえねえよ
そりゃ初見じゃ分かりにくいかもしれないけど、丁寧に型を考えれば分かるだろ

慣れてないと分かりにくいってだけでエラーにしていったら、真っ先にモナドとかアローとかをエラーにしなきゃダメじゃん

936 :デフォルトの名無しさん:2012/06/25(月) 17:12:37.58
僕が分からないのは僕が悪いわけじゃない病の人は放置で。

937 :デフォルトの名無しさん:2012/06/25(月) 17:27:34.13
エラーにしろは無いな。そんなコード見たら即座に修正するだけで

938 :デフォルトの名無しさん:2012/06/25(月) 17:44:43.13
dot :: (b -> c) -> (a0 -> a1 -> .. -> b) -> (a0 -> a1 -> .. c)
dot fに関して
(->)っていう型構築子によって作られる葉が型である型レベル木を右に潜って行ってたどり着いた先にfを適用するってイメージなんだから
レンズの概念で最右部にアクセスするレンズみたいなのを考えてそれを使って値レベルの木を操作し、
それを型レベルの木に持ち上げて・・・とか出来ないのかな

そう考えると($) ((.).(.)) fは($)がmodify、(.)が木の右にアクセスするレンズでそれを二つ合成
という具合にただのレンズを使った更新操作に見えてくる

同様に他のポイントフリー用のイディオムも何らかの抽象を持ってすれば型レベルのデータ構造に対する何らかの操作として
解りやすく捉えられるとかあると思う

939 :デフォルトの名無しさん:2012/06/25(月) 17:58:07.40
ポイントフリー化はcode golfと同様に頭の体操とかお遊び程度に留めておくべき。

940 :デフォルトの名無しさん:2012/06/25(月) 18:13:24.33
使い慣れた慣用句を引数に渡したり、意外といけるぜ。> ポイントフリー

941 :デフォルトの名無しさん:2012/06/25(月) 18:35:44.37
他の言語はcurryingをしないから
(a,b,c) -> d のような関数は適用する前の型より後の型が簡単になる

適用した後の型が複雑になる関数は色々難しい
const :: a -> (b->a)
(.) :: (a->b) -> ((c->a)->(c->b))

942 :デフォルトの名無しさん:2012/06/25(月) 18:50:16.06
>>941
言いたいことはわかるが、それってカリー化が原因か?

943 :デフォルトの名無しさん:2012/06/25(月) 19:09:25.86
>>934
>>917 は 「理論的に意味のあるコードならそのまま」 で、
「ただ単にトリッキーなだけなら排除」 するような仕様にしてほしいと言っています。

仕様と言うからには、ただ単にトリッキーなだけのコード 「全て」 ですよね。

それとも、単に >>910 に限定して、これが単なるトリッキーコードならエラーにする、
そういう仕様を Haskell という言語に盛り込んでほしいと言っているのでしょうか?
そうではないと思います。
そのような限定的な仕様は馬鹿げています。

やはり >>910 がもし単なるトリッキーコードなら、その >>910 が代表するような
単にトリッキーなだけのコード 「全て」 をエラーにする仕様を望んでいるのでしょう。

であれば、やはり何を以て単なるトリッキーコードなのかを定義する必要があることには
変わりないと思います。

944 :デフォルトの名無しさん:2012/06/25(月) 21:28:20.32
>>943
「仕様に盛り込め」じゃなくて、「仕様から削除しろ」という要求です

2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかった仕様を削除しろという要求です

仕様から削除できないなら、今までのプログラム人生で、2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかったコードを書くなというお願いです

945 :デフォルトの名無しさん:2012/06/25(月) 21:43:32.49
((.).(.)) が書けなくなるように、Haskellの仕様を削ることを考えよう。


(.) が定義されるなら ((.).(.)) も定義できるんだから
まず (.) をPreludeから排除する必要がある。

しかし、ただPreludeから削除しただけでは
ユーザが勝手に定義するのは止められないから、
演算子の自由な定義も削る必要がある。

さらに、ユーザ定義演算子を禁止しても
d :: (b -> c) -> (a -> b) -> a -> c みたいな関数があれば
d d d と書けてしまうので、高階関数も仕様から削る必要がある。

946 :デフォルトの名無しさん:2012/06/25(月) 21:52:41.83
>>917
> 初心者がネットからコピペしてコードに混ぜたら、保守するときに誰も理解できない

それは初心者に保守が必要な Haskell の仕事を任せた者の責任だ

947 :デフォルトの名無しさん:2012/06/25(月) 21:54:18.83
>>942
もし関数適用が1回だけならカリー化は関係ない
何回もネストする原因がカリー化

((f .) .) = curry . (f .) . uncurry
(((f .) .) .) = curry . curry . (f .) . uncurry . uncurry

const . const = curry . const
const . const. const = curry . curry . const

948 :デフォルトの名無しさん:2012/06/25(月) 21:55:16.73
>>945
ということは、ただ単にユーザが ((.).(.)) を使わなければいいだけじゃん

普通のポイントフリーは使い道あるから削らなくていい

949 :デフォルトの名無しさん:2012/06/25(月) 21:56:59.21
>>946
初心者でも実行できるコードを書けてしまうHaskellの責任だ
でないと、ソフトウェア科学は、C言語の時代から何も学んでいないと言われてしまう

950 :デフォルトの名無しさん:2012/06/25(月) 21:57:25.26
(.).(.)は仕組みを知らないと殴りたくなるコードだけど、
知ってればぼやきながら許容できるコードだし、 ←俺はこれ
慣れてれば当然の書き方だと思う

951 :デフォルトの名無しさん:2012/06/25(月) 22:07:13.71
ある人にとって当たり前のコードが、他の人には無駄にトリッキーな糞コードに見えたり、
また別の人には無駄に冗長な初心者くさいコードに見えるるということは普通にある(他の言語でもあると思うけど)
チームで仕事してるなら、そのチームにとってどういうコードが常識的か把握しとけって話になるけど、
webに置いてあるコードとかなら文句を言いながらでも頑張って読むしかない

952 :デフォルトの名無しさん:2012/06/25(月) 22:08:23.32
つまり>>910をエラーにして欲しいひとは
ユーザ定義演算子も高階関数もカリー化も無い言語を使えば良いんだよ
そんな言語なんて山ほどあるだろ
Haskell使う必要ない

953 :デフォルトの名無しさん:2012/06/25(月) 22:11:46.90
>>944
よく分らない部分がある。

> 2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかった仕様

これは、具体的にはどんな仕様のことを指しているの?
Haskell 2010 Language Report(http://www.haskell.org/onlinereport/haskell2010/
この中から、これが一例だというものは挙げられる?

それとも、今後そのような仕様が見つかった場合には削除してほしいという意味?
それならたぶん、今までもいくつか行われてきたような気がする。
例えば recursive do 表記とか。
まぁ、これはやはり役立つからと後でまた復活したけど。

954 :デフォルトの名無しさん:2012/06/25(月) 22:15:29.93
>>953
あぁ、すまん
例が悪かったか

recursive do は Haskell の仕様じゃなくて、
コンパイラ GHC の方の仕様だったかも


955 :デフォルトの名無しさん:2012/06/25(月) 22:20:02.83
>>952-953
やっぱり、エラーにするのは不都合が大きいので、そういうコードを書いた人をイジメぬいて退社させればいいと思う

956 :デフォルトの名無しさん:2012/06/25(月) 22:50:14.21
((.).(.))を使ったほうが分かり易いなら構わんだろ、とは思うが
\x y z -> x + y ^ z

flip ((.).(.))(^).(+)
と書くやつが居たら殴っていい

957 :デフォルトの名無しさん:2012/06/25(月) 22:51:13.64
>>944
> 仕様から削除できないなら、今までのプログラム人生で、2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかったコードを書くなというお願いです

最後が曖昧で、俺は「そういうコードを公の場に晒すな」という意味で捉えたけど、あってる?

もしそうだとしたら、そのお願いが叶えられることは、今後まずないと思う。

と言うかそれは、コードを読む側が「自分にとっては役に立たない単なる自慢コード」
なのかを今の自分の能力を総動員して見極める事柄じゃないの?

Haskell のコードに限らず、ネットに公開されている情報全てに言えることでしょ。
役に立つかどうかに限らず、嘘か本当かという話にも繋がる。

一対一の教師と生徒という関係ならまだ分らなくもないけど、
コードを公開する全くの赤の他人にそれをお願いするのは、怠慢だと思うよ。

958 :デフォルトの名無しさん:2012/06/25(月) 22:57:28.02
めんどくさいスレだなあ

959 :デフォルトの名無しさん:2012/06/25(月) 23:08:53.82
>>957
書いた本人には、「『書いた本人にとって』自慢する以外に役に立たないコードかどうか」判断できないってこと?
もし判断できないなら、病院に行った方がいいと思う
もし判断できていて、本当に自慢以外に役に立たないと判断していたら、自分のやってることは悪いことだと自覚すべきだと思う

960 :デフォルトの名無しさん:2012/06/25(月) 23:12:21.14
「仕様から削除しろ」の話はもうやめにしませんか?

961 :デフォルトの名無しさん:2012/06/25(月) 23:23:40.83
gcdをポイントフリーで(.)とmodのみを使って書けという問題が解けません
条件とラムダを使わないと無理ですよね

962 :デフォルトの名無しさん:2012/06/25(月) 23:31:23.00
>>959
本当にそれが「悪い」とまで言えるのか、誰にとってどれほど「悪い」のか、
という話はとりあえず置いておくとして。

そういう気持ちは分るし、役立つものだけが公開されるようにしようという
貴方の運動や働きかけを否定している訳ではないんだ。

ただ、お願いするだけなら、その願いは叶えられないと思うよ。
そんな甘くはない。

そして、ネット上に誰もが簡単に自由にどんな情報でも発信できる今の時代、
受け手側が自分の責任で情報を解釈できる力を求める気運が高まってるのは事実。

受け手側の能力を高める運動や働きかけをした方が、良い方向へ向うスピードは速いと思うな。

963 :デフォルトの名無しさん:2012/06/25(月) 23:35:09.41
もうええやろ

964 :デフォルトの名無しさん:2012/06/25(月) 23:35:25.12
(.)(.)おっぱい

965 :デフォルトの名無しさん:2012/06/25(月) 23:44:33.14
ポイントフリー病患者がキモいのはよく解った

966 :デフォルトの名無しさん:2012/06/25(月) 23:46:25.13
頭おかしいんだね
可哀想に

967 :デフォルトの名無しさん:2012/06/25(月) 23:50:28.03
>>961
それは、使える関数は mod のみ、使える演算子は (.) のみ、という意味か?

968 :デフォルトの名無しさん:2012/06/25(月) 23:58:01.51
>>967
はい
gcd' = (.)(.)(.) gcd' mod
みたいなかんじで

969 :デフォルトの名無しさん:2012/06/26(火) 00:19:14.61
>>968
モジュロ計算と、自身の再帰的定義だけで
最大公約数って求められるものだったっけ?

970 :デフォルトの名無しさん:2012/06/26(火) 00:22:38.47
if が欲しいね
パターンマッチ?

971 :デフォルトの名無しさん:2012/06/26(火) 01:07:08.94
>>966
そんな脊髄反射するほどのことか?

972 :デフォルトの名無しさん:2012/06/26(火) 01:26:08.17
ポイントフリー病って言葉にトラウマでもあるんだろう

973 :デフォルトの名無しさん:2012/06/26(火) 01:39:35.40
gcd 0 y = y
gcd x 0 = x
これは書いてよくて、一般的な場合だけポイントフリーにするならいけるんじゃない?

974 :デフォルトの名無しさん:2012/06/26(火) 02:49:42.80
gcd' 0 y = y
gcd' x 0 = x
gcd' x y = gcd'' x y
gcd'' = (\x y -> gcd' (mod x y) (mod y x))
この最後の行をポイントフリーにするってことか。考えたけど解らん

975 :デフォルトの名無しさん:2012/06/26(火) 08:28:42.18
gcd' (0,y) = y
gcd' (x,0) = x
gcd' (x,y) = gcd'' (gcd', (x, y) )
gcd'' = second (uncurry mod &&& uncurry (flip mod)) >>> app
使う関数をun/curriedどちらかに統一しないとcurryとuncurryが乱舞するから困る

あと無理やり全部ポイントフリーにするにしても
gcd' :: Integral a => (a,a) -> a
gcd' = loop $ swap >>> app &&& (fst >>> curry (cond ((==0) . fst .snd) >>> snd . snd ||| (cond ((==0) . snd . snd) >>> fst . snd ||| (second (uncurry mod &&& uncurry (flip mod)) >>> app))) )

cond :: (a -> Bool) -> a -> Either a a
cond p x = if p x then Left x else Right x

swap :: Arrow a => a (b,c) (c,b)
swap = arr snd &&& arr fst
ってな感じで分岐とか入れ替えが必要になるから(.)だけとかは無理っぽいように思える
自然数をλ式にエンコードする所までやればSKだけでいけるかもしれんけどそれこそesolang translatorでやれという話だし

976 :デフォルトの名無しさん:2012/06/26(火) 10:01:52.37
そもそも単に「ポイントフリースタイルで書け」では、何を「プリミティブ」とするかが決められないからな…
ちなみにsを使えば
dot2 s (.) ( dot2 s (.) gcd' ) mod ( flip mod )

※参考
dot2 s (.) f g h x = f ( g x )( h x )

で(多分)動く…


977 :デフォルトの名無しさん:2012/06/26(火) 10:18:22.05
あ、>>961ではプリミティブは(.)のみと規定されてるか…
(.)だけで、1つの引数を複数箇所で使用することは可能なのかな…


978 :デフォルトの名無しさん:2012/06/26(火) 10:52:46.56
BコンビネータだけでLコンビネータを作るという問題

979 :デフォルトの名無しさん:2012/06/26(火) 11:14:22.07
関数山手線ゲーム

1.関数を1つ決めます
2.既存の関数の集合からは定義できない関数を1つ挙げます
3. 2.で挙げられた関数を、既存の関数の集合に加えます

2.と3.を繰り返します

2.で挙げた関数が以下のいずれかの条件を満たすと負けです
・既存の関数から定義可能
・既存の関数の集合にその関数を加えるとチューリング完全にる(λxy.xとλxyz.xz(yz) が定義可能になる)

他の人が挙げた関数がいずれかに該当していると思ったら、指摘して証明しましょう 証明できたらその人の負け 証明できなければあなたの負けです!

※関数の型に、「関数型」を除く具体的な型や型制約があってはいけません つまり、関数の型は、Haskell表記で、小文字英数字と()と->だけで表されなくてはいけません
数値関数や文字列関数、リスト関数等は不可ということです


家族と、友達と、恋人と、大いに盛り上がること間違いなしですね!!!


980 :デフォルトの名無しさん:2012/06/26(火) 15:55:42.83
>>979
チューリング完全しばりこぇー

981 :デフォルトの名無しさん:2012/06/26(火) 16:33:03.71
>>980
そのルールがないと、sとkを挙げた時点で終了してしまいますからね

982 :デフォルトの名無しさん:2012/06/26(火) 16:48:31.56
>>917
C言語の関数ポインタもトリッキーで何やってるのか解
らないコードになるから全面禁止すべきだよな。

というかそもそもC言語はポインタが初心者に理解できないんだから
仕様でポインタなくすべきだ。初心者に保守できない言語はみんなクソ。

英文科出身でワードとエクセルしかできない俺にでも理解できる
言語をみんな作るべき。そうじゃないならつくった奴が馬鹿アホ間抜け
だということ。

初心者最強。誰でも生まれたときは初心者。初心者は神。

983 :デフォルトの名無しさん:2012/06/26(火) 17:25:05.21
読めないものを書く権利をなくすのではなく、読めないものを読む義務をなくせばいい

984 :デフォルトの名無しさん:2012/06/26(火) 18:00:19.14
まだやってんのか……

985 :デフォルトの名無しさん:2012/06/26(火) 18:02:20.23
翻訳の質の話題がやっと収束したら思ったら、今度はポイントフリーを構文的に禁止しろか…
ホントどうでもいい話題ほど止まらんよな、このスレ…。

986 :デフォルトの名無しさん:2012/06/26(火) 18:03:42.99
成功を全力で回避するのをやめれば、自転車置き場の議論が発生するのは不可避だ。

987 :デフォルトの名無しさん:2012/06/26(火) 18:17:23.65
成功する義務を全力で回避する
つまり安全神話を回避

988 :デフォルトの名無しさん:2012/06/27(水) 06:23:47.45
■ C
for( const char *s="12345"; *s; ++s ) if( '2'<*s&&*s<'5' ) printf( "%d", (*s-'0')*2 );
■ JavaScript
console.log([1,2,3,4,5].filter(function (i){ return i > 2 && i < 5 ; }).map(function(i){ return 2 * i; }));
■ Python
print(map(lambda x: x*2, filter(lambda x: x>2 and x<5, [1,2,3,4,5])))
■ Ruby
puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2}
■ C#
new{}{ 1,2,3,4,5 }.Where(x => 2 < x && x < 5).Select(x => x*2);
■ Common Lisp
(print (loop for x in '(1 2 3 4 5) if (< 2 x 5) collect (* x 2)))
■ Haskell
print [x*2| x <-[1,2,3,4,5], x > 2, x < 5]

989 :デフォルトの名無しさん:2012/06/27(水) 06:59:55.10
[1..5]くらい使え

990 :デフォルトの名無しさん:2012/06/27(水) 07:05:53.77
無限リストとはなんだったのか

991 :デフォルトの名無しさん:2012/06/27(水) 08:01:09.39
>>988
もうPythonでもリスト内包表記使えるぞと指摘するのに疲れた
print([x*2 for x in [1, 2, 3, 4, 5] if 2 < x < 5])

992 :デフォルトの名無しさん:2012/06/27(水) 08:34:15.60
python の
[hoge(変数) for 変数 in [〜] if 条件]
の構文(後置 if ?)って
リスト内包のときしか使えない?
for 変数 in [〜] if 条件:
  hoge(変数)
ってやるとおこられる
気のせい?


993 :デフォルトの名無しさん:2012/06/27(水) 09:21:31.30
リスト内包/ジェネレータ式のみだよ
for 変数 in [〜 if 条件]:
ならできる

994 :デフォルトの名無しさん:2012/06/27(水) 09:21:31.87
python初心者スレでどうぞ

995 :デフォルトの名無しさん:2012/06/27(水) 10:21:52.35
次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/

996 :デフォルトの名無しさん:2012/06/27(水) 10:28:29.80
Python3って消えたな

997 :デフォルトの名無しさん:2012/06/27(水) 10:44:45.38
>>993
ありがとう

998 : 忍法帖【Lv=40,xxxPT】 :2012/06/27(水) 12:11:49.10
誘導&うめてんてー

次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/

999 : 忍法帖【Lv=40,xxxPT】 :2012/06/27(水) 12:12:35.08
誘導っす

次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/

1000 : 忍法帖【Lv=40,xxxPT】 :2012/06/27(水) 12:13:16.35
完走!

次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

258 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)