関数型プログラミング言語Haskell Part18
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/03/16(金) 21:54:23.92ttp://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/
0002デフォルトの名無しさん
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
0003デフォルトの名無しさん
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]
0004デフォルトの名無しさん
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/
0005デフォルトの名無しさん
2012/03/16(金) 23:38:20.950006デフォルトの名無しさん
2012/03/17(土) 02:19:03.09Mightyってのがあった気がするんですが、廃れたのでしょうか
0007デフォルトの名無しさん
2012/03/17(土) 15:47:42.830008デフォルトの名無しさん
2012/03/17(土) 20:34:27.930009デフォルトの名無しさん
2012/03/17(土) 20:37:20.930010デフォルトの名無しさん
2012/03/17(土) 22:23:40.81インクリメンタルGCとか凝ったものはないけど
0011デフォルトの名無しさん
2012/03/17(土) 23:32:54.22乙
0012デフォルトの名無しさん
2012/03/17(土) 23:50:09.99よく知らんが、ちょうど今月号のWEB+DB PRESS vol.67の濃縮還元オレンジニュースって記事には、"Haskellで書かれたWebフレームワーク「Yesod」のチュートリアル"というタイトルで初心者向けのチュートリアル記事を書いたと言う記事がある
その中から引用する限りじゃ、Yesodは主要フレームワークの一つらしい
以下、記事を引用
Haskellの主要Webフレームワークには、Yesod、Happstack、Snapの3つがありますが、その中で比較的初心者が取り組みやすくコミュニティが活発なことからYesodを取り上げています。
・
・
・
中略
・
・
・
HaskellのWebフレームワークがRailsやPHPはもとよりNode.jsよりパフォーマンスに優れていることを示しています。
0013デフォルトの名無しさん
2012/03/18(日) 01:31:10.890014デフォルトの名無しさん
2012/03/18(日) 01:51:05.93考え方を理解すると、非常に洗練されてて理にかなっていることが分かる
0015デフォルトの名無しさん
2012/03/18(日) 14:39:00.03enum 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 クラスのインスタンスにすれば型的に安全に扱えるので、
列挙型も何かできるといいのですが
0016デフォルトの名無しさん
2012/03/18(日) 15:23:26.46とりあえずnewtypeにしてんだから、データコンストラクタとアクセサ(例の場合ならIntegrationRuleとrule)をエキスポートしなけりゃ、
モジュールの外ではCIntとして扱えないんだから問題なくね?
0017デフォルトの名無しさん
2012/03/18(日) 16:01:26.89toEnum 100 :: IntegrationRuleした時に実行時エラー吐くのが関の山だな
0018デフォルトの名無しさん
2012/03/18(日) 16:08:26.89リンク先では、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 というリテラルをコンパイル時にエラーとして検知できないか、
という趣旨の質問でした
0019デフォルトの名無しさん
2012/03/18(日) 16:12:59.75そうなんです
たとえ私が >>15 で「できない」と言った方法が使えたしても、
Enum クラスのインスタンスでは toEnum 関数を使われてしまいます
やはり、こういう時こそ Template Haskell の出番ですかね
0020デフォルトの名無しさん
2012/03/18(日) 16:22:13.05WordPressは単に便利なだけでなくて、コードが抽象化されてなくてベタな設計なのが良くも悪くもサイト制作側で受けてる
EC-CUBEはみんな泣きながらカスタマイズしてるけど、自作したら得られない決済系の実績があるから使ってる
Yesod広めたいんなら、なんでみんなPHP使うのかにヒントがあるんじゃないかな?
0021デフォルトの名無しさん
2012/03/18(日) 16:54:34.49整数リテラルから型レベル整数、そしてそれに対応したインスタンスとしてtoEnumを定義したEnumを使うというものぐらいだな
これならばコンパイル時にS (S (S ...))のインスタンスが見つからないという旨のエラーになる筈
これはリテラルとしてハードコーディングされた(コンパイル時に決まる)整数とそれ以外を区別するということでもあるのだが
そんな機構があっても使いこなせる人は極少数にしかならんというのはC++のconstexprがいい前例となってるのであまり期待はできないな
0022デフォルトの名無しさん
2012/03/18(日) 17:05:06.11リンク先のImports and Inclusionsの項のソース見て欲しいんだが、
エキスポートされてるのはqag関数と定数 gauss15, gauss21...だけになってるじゃない?
本体のc_qag関数とか、IntegrationRule型のデータコンストラクタとアクセサはエキスポートしてないから、外からは使えない。
って、事は(IntegrateRule 100) とかリテラル渡すようなコード書けるのはモジュールの中だけだし、
qag関数に渡ってくるのは、基本的にエキスポートした定数のウチどれかしかありえないわけよ。
だから後はモジュールのテストを十分尽くせば、>15が思ってるような不安はない、って事を言いたかった。
モジュール内でもエラーになるようにしたい、っていうのが趣旨だったならまぁちょっとずれた回答だったかもしれんが。
0023デフォルトの名無しさん
2012/03/18(日) 18:02:30.69すいません、おっしゃってることの意味がようやく理解できました
趣旨を勘違いさせてしまったようです
私が訊きたいことは、FFI で列挙型を含む C 言語の関数を使う場合に、
関数に渡す値の範囲をその列挙型の中に限定する方法は無いか、
という事でした
なぜなら、C 言語の列挙型の値は C 言語の int 型ですが、
Haskell の foreign import の型シグネチャで CInt を使うと、
列挙型の範囲を超えた値も構文上何も問題なく渡せてしまえるからです
リンク先の記事を示したのは、hsc2hs の #enum マクロを使ったとしても、
結局のところアクセス関数が自動的に作成されるだけであって、
アクセス関数を使わなければその関数を使えない訳ではない、
だからその方法も今回の問題解決には使えない事を言いたかっただけでした
今のところ、foreign import の型シグネチャでは CInt 型を使い、
それとは別に、その関数を呼ぶだけの別名の関数を定義し、
そのシグネチャで C 言語の列挙型の値の範囲に対応したデータ型を使い、
後者の関数のみをモジュールから公開することで、
モジュールの利用者には範囲外の値が利用できないようにしています
確かに、このように余計な関数を定義しても、インライン展開されて、
実行速度上はほとんど何の問題もない筈ですが、けっこう無様です
なにか別の案はないですかという趣旨でした
とりあえず、上記の方法で我慢します
0024デフォルトの名無しさん
2012/03/19(月) 01:31:28.47自分で作れとか言ってきた奴
staticパッケージという素晴らしいものがあったじゃないか
全く隠してやがったな
0025デフォルトの名無しさん
2012/03/19(月) 07:09:37.10せっかくこういう本もあるのだから、自作するのもいいと思うんだが
0026デフォルトの名無しさん
2012/03/19(月) 08:24:52.240027デフォルトの名無しさん
2012/03/19(月) 08:27:21.40お前と違って研究費で落ちねえんだよ
高えよちくしょう
0028デフォルトの名無しさん
2012/03/19(月) 12:33:02.16私は地元の図書館で見つけました
0029デフォルトの名無しさん
2012/03/19(月) 14:00:02.75「この商品を買った人は」に、ちくま学芸文庫の甘利先生の本がでてきたのだが、
すごい装丁だw
0030デフォルトの名無しさん
2012/03/19(月) 15:12:03.39こんなニッチな本を誰が買うのかと思ったら機械学習系ブログがプッシュしてました。
隠れた良書「計算機シミュレーションのための確率分布乱数生成法」を大プッシュしたい
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
0031デフォルトの名無しさん
2012/03/19(月) 15:54:21.230032デフォルトの名無しさん
2012/03/19(月) 20:13:39.54こういうのに興味ある人に、こんな本もあるのかと気づいてほしくて紹介しただけだから
興味が無ければ無視してくれればいい
0033デフォルトの名無しさん
2012/03/19(月) 20:24:52.960034デフォルトの名無しさん
2012/03/20(火) 01:29:25.44パッケージのモジュールが3画面分割で見易くなる
0035デフォルトの名無しさん
2012/03/20(火) 10:02:14.100036デフォルトの名無しさん
2012/03/20(火) 10:22:45.600037デフォルトの名無しさん
2012/03/20(火) 11:04:43.10俺IE6なんだ。。。
0038デフォルトの名無しさん
2012/03/20(火) 11:36:20.94安らかに眠らせてあげろよ
0039デフォルトの名無しさん
2012/03/20(火) 14:12:30.190040デフォルトの名無しさん
2012/03/20(火) 14:50:48.49目的の方でいうと、たとえば私の仕事場では単位時間辺りの
実質的な仕事の量と質を上げるために利用している
慣れというのもあるだろうが、初めから厳密な型を意識したプログラミングは、
そうでないCなどでのプログラミングと比較して、小さくて大量の(悩ましい)バグが、
コンパイルの段階で潰しやすく、実行時にはもっとアプリに本質的なバグの発見に集中できる
型推論の機能も、間違った型の使い方をコンパイル時に指摘してくれて助かってる
また遅延評価のおかげで、一連の大きな計算において、
その計算を意味の塊を基準にして個々のモジュールに分割しやすい
主にこれら2点が実質的な仕事の量と質を上げるだろうと目論んでHaskellを使い始めたが、
目的は見事に達成されている
ちなみに、たまたま私の部署は処理時間の短縮や計算リソースの削減を
厳しく求められるアプリを作るところではないため、Haskell のデメリットは表に出にくい
0041デフォルトの名無しさん
2012/03/20(火) 14:56:30.410042デフォルトの名無しさん
2012/03/20(火) 14:59:57.29GCC がそれをやってくれる
0043デフォルトの名無しさん
2012/03/20(火) 15:09:00.10ghcのコンパイラオプションでCのコード吐けるけど?
004442
2012/03/20(火) 15:15:36.89GCC じゃなくて ghc だ
0045デフォルトの名無しさん
2012/03/20(火) 16:21:13.11Haskellでコンパクトに書けたコードはまた見てみたくなる
Haskellは書くときにうんざりする
多言語は書いた後で絶望する
0046デフォルトの名無しさん
2012/03/20(火) 23:58:58.60要素番号の重複を認めない 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]]
0047デフォルトの名無しさん
2012/03/21(水) 00:22:47.670048デフォルトの名無しさん
2012/03/21(水) 01:26:20.300049デフォルトの名無しさん
2012/03/21(水) 01:32:45.19要素リストは配列にぶち込んどいて、
インデックスの組み合わせ生成して列挙すんのがベターかね。
0050デフォルトの名無しさん
2012/03/21(水) 02:20:06.92こういう感じ?
0051デフォルトの名無しさん
2012/03/21(水) 03:13:40.85ABBCDDDEFFGGGG
から5個選ぶ時の組合せを全て列挙せよ
みたいな
重複を許したものを吐き出してフィルターかけるのはもちろん駄目
重複が無い配列の時の組合せを応用してできるの?
005246
2012/03/21(水) 07:31:22.42俺が取り組んだのは、元のリストは要素の対して重複を許し、
そこから選ぶ要素番号に対しては重複を認めないタイプの問題だった
たとえば、元のリスト xs から 3 つ選ぶ場合、
[xs !! 0, xs !! 3, xs !! 8] は許されるけど、
[xs !! 0, xs !! 3, xs !! 3] は認めない
まだ取り組んではいないけど、重複を許した方が多少記述が減るんじゃないかな
0053デフォルトの名無しさん
2012/03/21(水) 09:34:51.31だと酷いことになる
重複するリストから組合せ取り出す局面がどれほどあるか判らないけど
0054デフォルトの名無しさん
2012/03/21(水) 15:31:44.990055デフォルトの名無しさん
2012/03/21(水) 16:36:15.52let comb n xs ys | length ys == n = [ys] | xs == [] = [] | True = mapcon (\(z:zs) -> comb n zs $ z:ys) xs
もうあんまりエレガントとも思えないけど
005646
2012/03/21(水) 23:06:26.29tails' :: [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重ループを分解した感じ
自分で書いたコードだが、なんか自分でムカツク
005746
2012/03/21(水) 23:34:59.74あれ、一つ前のバージョンをコピペってしまった
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
0058デフォルトの名無しさん
2012/03/22(木) 01:58:12.620059デフォルトの名無しさん
2012/03/22(木) 08:19:30.23comb _ [] = []
comb n (x:xs) = map (x :) (comb (n-1) xs) ++ comb n xs
どうしてもってんならlength xsを最初に数えて持ち回せ。
0061デフォルトの名無しさん
2012/03/22(木) 22:49:41.00ストライクウィッチーズのあの人に見えた
0062デフォルトの名無しさん
2012/03/25(日) 04:51:06.130063デフォルトの名無しさん
2012/03/25(日) 09:08:01.990064デフォルトの名無しさん
2012/03/25(日) 22:18:09.21これが非正格関数 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 では一向に簡約が進まなくなるから成り立たない場合もある
という理解で良いでしょうか
0065デフォルトの名無しさん
2012/03/25(日) 23:14:33.16q (case e of { p1 -> e1; ... pn -> en }) = case e of { p1 -> q e1; ... pn -> q en }
006664
2012/03/25(日) 23:21:45.04それは、単に問題文を言い換えただけではないのですか?
結局 >>65 の場合も「なぜ q が非正格関数だとその等式が成り立たないのか」
を説明しないと練習問題 3.1 を説明したことにはならないような気がするのですが
0067デフォルトの名無しさん
2012/03/26(月) 08:28:16.54で両辺計算してみな
0068デフォルトの名無しさん
2012/03/26(月) 22:04:32.42foldL f' e' ⊥ = ⊥
foldLは第三引数について正格な性質を持ってる。
ところが、例えばh = const xで非正格な関数とすると
(h . foldL f e) ⊥ = x
だから、h . foldL f e = foldL f' e'の融合則が成り立つには
hは正格関数でないといけない、ってことかな?
0069デフォルトの名無しさん
2012/03/27(火) 03:34:38.13まず日本語マニュアル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関数が手持ちのパッケージでは用意されていないのでしょうか、環境変数の与え方は大丈夫でしょうか
どなたかインストールできない原因分かりましたら教えていただけるとありがたいです
0070デフォルトの名無しさん
2012/03/27(火) 19:41:43.970071デフォルトの名無しさん
2012/03/27(火) 21:53:06.47sudoで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かどっかに書いておく。
0072デフォルトの名無しさん
2012/03/27(火) 22:40:37.45Haskell とは何の関係もないが、
$ sudo bash
これやるくらいなら
$ su -
でいいと思うんだが
0073デフォルトの名無しさん
2012/03/27(火) 23:34:13.91su - だと、cdしなおさないといけないじゃん。
まあ、suだけにすればいいかもだが、rootのパスワードはなるべく入力したくないな。
0074デフォルトの名無しさん
2012/03/28(水) 02:38:54.370075デフォルトの名無しさん
2012/03/28(水) 03:12:56.50>>69は良く分かってないみたいだから、suでrootのパスワード入力させとくのが確実
sudoは設定ちゃんとしてないとうまく動いてくれないかもしれない
まあ、でも、sudo mkhref ref/* が一応実行されてるみたいだから、たぶんsudo -sでもsudo bashでもいいかな
0076デフォルトの名無しさん
2012/03/28(水) 08:12:21.700077デフォルトの名無しさん
2012/03/28(水) 23:03:43.68これって第1引数のアクション(イニシャライザ)で例外が発生しても、
第2引数のアクション(ファイナライザ)は実行さないよね
bracket 関数と同じ形で、
イニシャライザで例外が発生してもファイナライザが実行される関数は
標準ライブラリで用意されてるの?
それとも自作する必要がある?
同じ形というのは、イニシャライザの戻り値が
ファイナライザやコンピュテーションの引数として利用できるという意味
0078営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 08:51:07.110079営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 12:38:05.02あぁそうか
言われてみれば設計がおかしいな・・・
見直してみるよ
ありがと
0080営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 18:39:21.66あれエープリルフールなんか?
0081営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 18:52:29.02エープリルフールならもっと分かりやすいネタにして欲しいもんだ
0082営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 19:15:16.280083営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 20:55:29.57なんで?
0084営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:07:15.70スタンドアロン環境で使いたいから
0085営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:11:00.55ちょと苦手かも。CLISPも同じなんだがな。
0086営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:30:33.12なんだよ、それなら Haskell Platform に hmatrix 入れろよとか、
yamapa 入れろよとか、wx や gtk2hs 入れろよとか、iteratee 入れろよとか
そういう単なる「〜だったらいいなぁ」というチラ裏と変わらんじゃん
いや、べつにそういうのがダメとは言わないけど、
もう少し Haskell 全体を考えたり、
もう少し本質的なことから論理的に導き出した要望かと思って期待してた
0087営利利用に関するLR審議中@詳細は自治スレへ
2012/04/01(日) 21:32:41.920088営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 05:31:58.67ホントだ。
でもAnimasの改良取り入れただけかな?
コメントは書いてんのに、ドキュメントのスカスカっぷりは相変わらずゆがみねぇな…。
0089営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 12:45:15.77「Haskell 全体を考えたいなぁ」もチラ裏と変わらない
0090営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 18:36:33.86今夜から枕の下に敷いて勉強する
これで漏れも立派なハスケラーだ
0091営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 01:13:37.94自習書としてはどうなんだろう。
新しい構文とかがけっこう説明なしにでてくるよね。
まあ文法は別の本で見ればいいのか。
あと8章が……
0092営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 06:28:43.11パーサーは難しいけど、モナドと同じで動かしてみないと、どういう働きか実感できない所があるな
ふつケルでも結局Wiki作る時に書かされるから、この本だけの特別ではない
(初心者置いてきぼりにしないように頑張ってる分だけプログラミングHaskellの方が親切ではある)
0093営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 18:52:31.15ほとんど開発が止まっているように見えるのは何故だろう
0094営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 18:58:32.29大学の研究ならほとんどが死んでいるプロジェクトで当然。
卒業したら放置なものが多いから。
これには悪い面もあるが、常に新しい風が吹き込む理由にもなってる。
そういうことも理解して使いこなしたほうがよい。
HaskellWikiも単なる道具に過ぎないのだから。
0095営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 08:26:36.31常に更新されている方がいいとも限らないのでね。
依存関係でおかしくなってるものを放置されてると困るけどね。
0096営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 22:47:55.680097営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 23:06:06.65有用な使い道を教えてくれ
0098営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 07:53:10.200099営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 08:50:43.420100営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 15:11:00.500101営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 15:50:48.11インストール処理が終わった後も gcc.exe のプロセスが消えない
これって、正常じゃないよね
0102営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 16:32:35.76どうも、インストール処理の途中で強制終了させた場合に、
ghc.exe のプロセスは消えるけど gcc.exe のプロセスが残るみたいだ
理由はよく分かんないけど、まぁいいや
スレ汚してすまん、気にしないことにして自己解決した
0103営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:45:37.91Deprecated のカテゴリに分類されてるんだけど、これって非推奨なんだよね
再描画要求のイベントが来た時に反応したいんだけど、
本当は何使えば良いの?
それとも非推奨じゃなくて、近い将来消える予定だけど、
とりあえず今のところはこれ使っとけって意味?
0104営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 13:50:38.88data 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はそのままになるらしいんだけど
普通にコンパイルエラー、これは可能なの?
0105営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 14:22:21.53aLabelを更新してaLabelの値が返ってくるわけじゃない
Cの構造体とかはこうだけど
レコード更新構文は、既存の値から一部を変更しただけの新しい値を作りたいとき、
A { aUrl = aUrl href, aLabel = "that" }
と書かなきゃいけないところを
更新する必要のあるフィールドだけ書けばいいだけにする、というただの構文糖衣。
0106営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 14:44:21.12printが可能かではありません、誤解を招いてすいません(原文のままコードを記述したため)
href { aLabel = "that"}は実質、A { aUrl = aUrl href, aLabel = "that" }で
これはhrefを再定義する構文ではなくて、hrefとは別のAnchor型で,hrefのaLabelフィールドだけ変えた値を作っているということですね
hrefの再定義だと思っていたので、
href {aLabel = "that"}を単文でdoの中に入れたときにエラーでん?と思ったのですが納得しました
0107デフォルトの名無しさん
2012/04/13(金) 18:13:46.760108デフォルトの名無しさん
2012/04/13(金) 21:31:53.54初めの1回だけ、よく 0xc0000142 のエラーが出るよね
あれ何なの?
どちらももう一回トライすれば普通に起動するから、
そのまま使い続けてるけど、なんかマズイかな
0109デフォルトの名無しさん
2012/04/13(金) 23:26:35.58とうとう wxWidgets 2.9 only になった
0110デフォルトの名無しさん
2012/04/14(土) 16:01:19.30特に質問することが無いんだもん・・・
初心者でも簡単に書けるようになるのは良いけど、スレが盛り上がらないのも確かだな・・・
0111デフォルトの名無しさん
2012/04/14(土) 16:10:39.33出たこと無い・・・32ビットの頃では何も問題なかったし、今の64ビットでもghci上で(横に)長めの入力すると挙動が怪しくなるくらいかな
それでもrubyのirbよりは安定してるが・・・(すぐ激重になって使い物にならん)
0112デフォルトの名無しさん
2012/04/14(土) 17:12:23.96styledTextCtrl などのコントロールもちゃんと使えるようになったのはいいんだが、
ghc のリンク処理と、出力された実行ファイルの起動に時間がかかるようになった
特にリンクは時間かかりすぎ
コンパイル自体は普通に速いのに、リンクでフリーズしたかと思った
これは、wxWighets の方のビルド設定で改善できるんだろうか
あと、相変わらず ghci 上では実行できない
まぁ些細な問題だ
あとは wxPack が 2.9 にバージョンアップすれば初心者にも勧められる
0113デフォルトの名無しさん
2012/04/14(土) 23:40:32.24今 GLCanvas の対応とかどうなってるのか色々試してるけど、
前言撤回、些細な問題ではなかった
このリンクの遅さは異常だ、イライラする
メインウィンドウをひとつ表示するだけのプログラムでも、
オプション無しで ghc を実行して exe ファイルへのリンクするのに 50 秒以上、
その exe ファイルを実行してからウィンドウが表示されるまで 5 秒以上かかる
wxWidgets のビルドオプションをモノリシックと非モノリシックで両方試したけど、
どちらもリンクや起動の時間に対して目に見える影響はなかった
これ、俺だけ?
なにか改善する方法は無いんだろうか
とくに無ければ、少なくともバージョンアップするまでは gtk2hs を使うしかないな
[環境]
Windows7
ghc 7.4.1
wx-0.90
0114デフォルトの名無しさん
2012/04/15(日) 08:47:17.26不毛かもしれない宗教論争とはいえ、純粋志向のハスケラをおちょくっているのを見るのは楽しい。
この論争はハスケルには処理系を含めてあらゆるレベルで副作用がない、
という無理な主張から始まったと思う。
言語自体には副作用がない、でも、処理系には副作用があるようにみえる。
でも、それは勘違いだ。ハスケル処理系にもまったく副作用がないのだ。
副作用が発生しているのはハスケル処理系でなく、ハスケル処理系が
生成したDanoMoi処理系だ。
という主張がありましたね。
0115デフォルトの名無しさん
2012/04/15(日) 09:33:43.500116デフォルトの名無しさん
2012/04/15(日) 09:34:37.440117デフォルトの名無しさん
2012/04/15(日) 10:14:32.40隔離スレ http://toro.2ch.net/test/read.cgi/tech/1333801607/
で暴れてた馬鹿がこっちに逃げて来たみたいです
FizzBuzzすら書けない口だけ野郎なんで無視してもらって結構です
0118デフォルトの名無しさん
2012/04/15(日) 11:13:37.90http://www.kmonos.net/wlog/65.html
> 15:49 06/09/08 DanoMoi と Haskell
>決して「実際にそういう実装/理論になっている」という話ではなく、
>「こういう風に考えとけばわかる気がする」みたいな話なのでよろしくお願いします。
> ・Haskell プログラムには、一切いかなる意味でも副作用は存在しない
> ・Haskell プログラムは、"DanoMoi" というプログラミング言語のプログラムを生成する。
>"DanoMoi" という名前および概念は今私が勝手に考えたので適当ですよ。
プログラムと処理系は同じ意味だと思っているのですか?
0119デフォルトの名無しさん
2012/04/15(日) 13:41:43.290120デフォルトの名無しさん
2012/04/15(日) 13:43:34.33ないない。
0121デフォルトの名無しさん
2012/04/15(日) 14:04:53.77新しく世界一のスパコンを作った = ハードウェアとそれ専用のOSを作った(むしろハードウェアはそのままでOSだけを改良した)
0122デフォルトの名無しさん
2012/04/15(日) 14:15:40.440123デフォルトの名無しさん
2012/04/15(日) 15:59:38.46アホ丸出しで恥ずかしくないの?
0124デフォルトの名無しさん
2012/04/15(日) 16:04:00.61大学でスパコンの講義受けるとOSとハードは同じだと教わるよ
0125デフォルトの名無しさん
2012/04/15(日) 16:13:02.270126デフォルトの名無しさん
2012/04/15(日) 16:24:20.62スパコンは、ファイル管理システムとハードウェアとは不可分
逆に言うと、OSだけを取り出せと言われたら、LSIをペンチでいくつか取り出すことになる
DOS/V機やUNIXを使っていると分かりずらいが、UNIXで言うと、常駐ソフトとカーネルの一部がハードウェアそのものになってる
0127デフォルトの名無しさん
2012/04/15(日) 17:03:17.980128デフォルトの名無しさん
2012/04/15(日) 17:08:26.97それを「OSとハードウェアは同じ意味」とか言っちゃうのは痛い。
さらにスパコンと呼ばれるものがすべからくそういう構成をとってると思い込んでるのも痛い。
誰が教えたの?
0130デフォルトの名無しさん
2012/04/15(日) 18:33:14.08デーモンという言葉すら知らない幼稚園児レベルのド素人は、まずは幼稚園に行けば?
0131デフォルトの名無しさん
2012/04/15(日) 18:36:50.240132デフォルトの名無しさん
2012/04/15(日) 18:38:20.84ノードやバスのファームウェアも含めてアップデートするんで、ソフトウェアだけで配布されてますが?
使ったことないんじゃないの?
0133デフォルトの名無しさん
2012/04/15(日) 18:43:44.980134デフォルトの名無しさん
2012/04/15(日) 19:25:43.97内容云々より、分かりずらいだのすべからくだの
日本語が気になってしょうがない
0135デフォルトの名無しさん
2012/04/15(日) 20:38:41.030136デフォルトの名無しさん
2012/04/16(月) 07:13:57.36関数型言語使いには無職が多いと聞きます。
皆が働いている時間に勉強や議論ができます。良かったですね!
今日も有意義に過ごしましょう!
0137デフォルトの名無しさん
2012/04/16(月) 07:23:29.970138デフォルトの名無しさん
2012/04/16(月) 07:23:33.830139デフォルトの名無しさん
2012/04/16(月) 07:53:15.45今日も一日ドカタ仕事頑張ってね!
0140デフォルトの名無しさん
2012/04/16(月) 07:54:30.890141デフォルトの名無しさん
2012/04/16(月) 09:22:55.360142デフォルトの名無しさん
2012/04/16(月) 10:07:06.630143デフォルトの名無しさん
2012/04/16(月) 21:46:45.82実は正確にいうとスパコンに限らず、そこら辺のAT互換機もハードウェアとOSは同一
(スパコンはハードウェアとOSをセットで開発しないと、ハードウェアを作ったとは言わない)
特にHaskellを扱うようなソフトウェア科学から言えば同一と言わなければならない
理由はハードウェアを抽象化したモノがOSだから
ゲート回路だけでOS全部を構築しててもC言語でOS全部を書いていても、プログラムからは一切区別できない
区別できないってことは同じということ
0144デフォルトの名無しさん
2012/04/16(月) 22:36:02.49たとえばforkシステムコールをどうやって論理回路で実装するのか、論文が一本でもあったら示してくれ。
0145デフォルトの名無しさん
2012/04/16(月) 22:42:55.75相手にしちゃダメ
0146デフォルトの名無しさん
2012/04/16(月) 22:46:57.64論理回路でチューリングマシンを実装すればいいじゃん
0147デフォルトの名無しさん
2012/04/16(月) 22:52:33.550148デフォルトの名無しさん
2012/04/16(月) 23:00:17.85USBメモリと同等のモノはFFとNANDゲートだけで構成できる
USBメモリの中にOSを入れることができる
つまり論理回路しかなくてもOSは構成できる
0149デフォルトの名無しさん
2012/04/16(月) 23:06:10.280150デフォルトの名無しさん
2012/04/16(月) 23:12:15.14OS → Haskellの言語処理系
USBメモリと同等のモノはFFとNANDゲートだけで構成できる
USBメモリの中にHaskllの言語処理系を入れることができる
つまり論理回路しかなくてもHaskllは構成できる
>>150 相手しちゃダメっ
0151デフォルトの名無しさん
2012/04/16(月) 23:13:33.35シミュレーション関係とかΣ代数ホモモルフィズムとかちゃんと意味かけやぼけー
0152デフォルトの名無しさん
2012/04/16(月) 23:18:00.73その程度の頭で数学やってるんだw
0153デフォルトの名無しさん
2012/04/16(月) 23:27:59.61設計に従って手で鉛筆と紙を動かせば問題ない
>>150
Haskellを経由しないシステムコールを禁止すれば、HaskellプログラムかHaskellより高水準のプログラミング言語から見ればそのHaskell処理系がOSでありハードウェアということになる
つまりHaskellマシン
0154デフォルトの名無しさん
2012/04/16(月) 23:28:52.93スーパーコンピュータに限らず、あらゆるコンピュータのあらゆるソフトウェアが。
スーパコンピュータのOSが特別、というのがお前の主張だったよな。
> DOS/V機やUNIXを使っていると分かりずらいが
とお前は言っている。それをちゃんと説明しろ。できなければ回線切って吊るか消えろ。
0155デフォルトの名無しさん
2012/04/16(月) 23:33:31.560156デフォルトの名無しさん
2012/04/18(水) 22:13:15.53DOS/V機やUNIXはOSのうちソフトウェアの可換性の高い部分が多く、ユーザがさわって移植している部分こそがOSだと勘違いしているから、DOS/V機やUNIXを使っていると「OSがハードウェアと同一だと」分かりずらい
新しいスパコンを開発するときには、OSに他のハードとの可換性がないため、OSとハードウェアは完全に同一
「新しいスパコンを開発した」とは「新しいOSを開発した」と同意語で、この認識は世間一般でも認められている
筐体の中のLSIに一切変更を加えなくても、OSの改良で「新しいスパコンを開発した」とニュースになる
ソフトウェアは抽象度によってハードウェアから独立するので、あらゆるコンピュータのあらゆるソフトウェアをハードウェアとは呼ぶのは正しくない
プログラムの電子データのビット列とそれを格納してる機構はハードウェアだが、プログラムのセマンティクスはハードウェアではない
ただひとつ例外があって、OSというプログラムはそのセマンティクスがハードウェア
0157デフォルトの名無しさん
2012/04/18(水) 22:26:59.45スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
Linix、AIX、UNIXはソフトウエアである。
したがって、スパコンのOSはソフトウェアである。
この問題についての詳しい議論は、こちらのスレ↓が適している。
http://toro.2ch.net/test/read.cgi/tech/1331930031/
0158デフォルトの名無しさん
2012/04/18(水) 22:39:40.50スペルミス。LinixはLinuxの誤記。ちなみに京にはLinuxが移植された。
0159デフォルトの名無しさん
2012/04/18(水) 22:42:45.46スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
スパコンのOSはハードウェアである。
したがって、スパコン以外のUNIX系OSもハードウェアである。
0160デフォルトの名無しさん
2012/04/18(水) 22:47:24.63京はノードに少し改良したLinuxを入れてて、京そのもののOSは移植じゃなくて改良
0161デフォルトの名無しさん
2012/04/18(水) 22:55:14.12> スパコンのOSはLinixやAIX(IBMのUNIX),IRIX(SGIのUNIX)等、UNIX系OSである。
↓この間に飛躍がある。
>スパコンのOSはハードウェアである。←根拠を省いた断定。
0162デフォルトの名無しさん
2012/04/18(水) 23:08:22.98別の言い方をしましょう
「例えば、HaskellでプログラミングしてるときのOSって何?」
「Haskellでプログラミングしてるとハイパーキューブとかのハードウェア構造が消えるけど、ハードウェアは何に吸収されたの?」
0163デフォルトの名無しさん
2012/04/18(水) 23:14:00.030164デフォルトの名無しさん
2012/04/18(水) 23:15:54.30それこそ初心者スレへどうぞだよ(OS,UNIX板あたりも含めて)。
もう少しコンピュータのいろはを勉強するか、あるいは無知の知に気がついた方がよい。
ヒント
・言語処理系から見たOSはライブラリの下でsystem callとして呼び出され機能している。
・OSは(というか通信ミドル)はトポロジーを特に隠さない。
むしろトポロジーを意識して並列分散したほうが性能がでる。
Haskellがトポロジーを露わに扱う術を持っていないだけである。
0165デフォルトの名無しさん
2012/04/19(木) 00:45:36.210166デフォルトの名無しさん
2012/04/19(木) 00:50:20.71「スパコンのOSはハードウェアである。」
とかトンデモな断言をするより遙かにましだろ。
「UNIX系OSもハードウェアである。」
に至っては、初心者スレではなく、もはや病院行けとしか言いようがない。
恥ずかしすぎるので人前では決して言わないように。
0167デフォルトの名無しさん
2012/04/19(木) 01:33:45.40ghc 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
0169デフォルトの名無しさん
2012/04/19(木) 02:46:32.16にすればおk
0170デフォルトの名無しさん
2012/04/19(木) 20:50:07.23System call がハードウェアとの接触点ということでしょう
ということは、rawSystem から向こうは全部ハードウェアです
仮に、Haskellプログラムがプログラム上の言明でトポロジーにアクセスできてどのノードのどのLSIのどのメモリのどのビットを1にするか指定していたら、そのプログラムはOSです
0171デフォルトの名無しさん
2012/04/19(木) 21:04:49.64・コンピュータ科学では、「どのコンピュータの」OSもハードウェアと「原理的に」同一
・一般のコンピュータ科学を知らない人たちは、スパコン業界のハードウェアとOSを同一視している
分からなければ、次の話を考えればいい
今パソコンの中に10cmくらいの512MBのメモリが入っている
この世から、プログラムを高水準のモノから次々の削除していく
一度削除したら、そのプログラムと同じことができるモノは永遠にこの世に出てこない
これを続けていくと、OSが削除されたときに512MBのメモリはハードウェアではなくなり、ただの石になる
もっと言うと、川べりに落ちてるただの石も、その石を動かすシステムがあって、Haskellプログラムからそのシステムにアクセスできて計算に利用できれば、そのシステムはOSであり、そのOSと石はハードウェアになる
0172デフォルトの名無しさん
2012/04/19(木) 21:22:33.360173デフォルトの名無しさん
2012/04/19(木) 21:59:04.77持ちネタはそんなにないから、しばらくすれば満足して黙る
0174デフォルトの名無しさん
2012/04/19(木) 22:06:58.32例外はOSの論文読んでるときだけ
0175デフォルトの名無しさん
2012/04/20(金) 00:43:47.39この世にこれほど頭の悪い人を見たことがない。
0176デフォルトの名無しさん
2012/04/20(金) 02:42:48.57すれ違い迷惑です。退場してください
0177デフォルトの名無しさん
2012/04/20(金) 13:03:38.270178デフォルトの名無しさん
2012/04/20(金) 16:23:19.18http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell
どうよ?
0179デフォルトの名無しさん
2012/04/21(土) 22:14:24.350180デフォルトの名無しさん
2012/04/22(日) 07:57:37.73ttp://www.haskell.org/ghc/docs/latest/html/users_guide/lang-parallel.html
0181デフォルトの名無しさん
2012/04/22(日) 08:05:10.570182デフォルトの名無しさん
2012/04/22(日) 11:52:22.810183デフォルトの名無しさん
2012/04/22(日) 11:55:45.930184デフォルトの名無しさん
2012/04/24(火) 23:23:42.89(論文のインベーダーを改造したり、ブロック崩しを作ったりしました)
一方、同じく FRP ライブラリの Reactive の方では、
どのようにゲームを作るのか
具体的には、個々のキャラを毎フレーム独立に動かしながら、
かつ互いに(衝突などで)関連を持つようにするには、
どのようなフレームワークを考えれば良いのか
生成や消滅はどのように考えるのか
参考になりそうな文献や記事は無いでしょうか
自分では、イベントとシンクの考え方がユニークで面白いので、
これをゲームオブジェクト間の関連に使えないかと考えているのですが、
他の人はどのように考えているのか、参考にしたいです
0185デフォルトの名無しさん
2012/04/25(水) 01:23:27.55Yampaは、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/
0186デフォルトの名無しさん
2012/04/25(水) 02:00:46.52全てTime -> aという連続関数として考えるのが基本的なアイディア。
イベントやビヘイビアの合成は、
SF a b = (Time -> a) -> (Time -> b)
という写像変換として定義して、その枠組みにアローを使ったと。
古典FRPの概要と欠点とか、AFRPが何を改善したのかとかは
http://www.haskell.org/haskellwiki/Yampa
から辿れる、ITU-FRP2010 のスライドで説明されてるから見とくと良いと思う。
0187デフォルトの名無しさん
2012/04/25(水) 04:37:14.33実際に使われてるコード読みまくるか
0188デフォルトの名無しさん
2012/04/25(水) 19:19:28.33Yampa でゲームを作る場合、
pSwitch 系の関数を中心にイベント周りを組み立てるのが一般的ですよね
(論文 The Yampa Arcade や、これを引用してる他の論文などでも基本的にそうなってます)
まず、現在発生しているゲームオブジェクトを全てまとめたコレクションを作っておく
その上で、たとえば pSwitch 関数や dpSwitch 関数を使うのでしたら、
各ゲームオブジェクトや外部入力を起源とするイベント(衝突やビーム発射)を
発生させる関数を第1引数に渡す
コレクションの初期値を第2引数に渡す
第1引数の関数で発生したイベントを、コレクション内のゲームオブジェクトを
生成したり消滅させるイベントに変換する関数を第3引数に渡す
第3引数の関数で発生したイベントを解釈して
実際にコレクションを修正する関数を第4引数に渡す
細かいことはとりあえず抜きにして、大まかにはこんな感じだと思います
こうやって作った pSwith 関数や dpSwitch 関数の戻り値であるシグナル関数に、
ゲームを回すのに必要なシグナルを毎フレーム送るようにする
非常に分りやすく、イベントの伝達がスッキリして、
Yampa はかなり良い基盤を提供してくれると思っているのですが、
こういった基盤は Reactive の方ではどのようになっているのか聞きたいです
Reactive では Yampa みたいなイベント周りの仕組みを一ヶ所に集中させるのとは
また違った方法をとっているのでしょうか
0189184
2012/04/25(水) 19:22:23.08すいません、>>185 が Reactive についてはノータッチなのは分ってますが、
とりあえずどこかへアンカーを付けないと、後から話の流れが追いにくいと思いまして
0190デフォルトの名無しさん
2012/04/27(金) 11:55:44.480191デフォルトの名無しさん
2012/04/27(金) 12:00:24.86Non-stop Haskell(笑)
0192デフォルトの名無しさん
2012/04/27(金) 12:01:31.380193デフォルトの名無しさん
2012/04/27(金) 12:15:26.39λカ娘(二期)を読んだらメモ化には Control.Monad.Memo (cabal install monad-memo)を使うといいよ的な
事が書いてあったのでHackageあたりの文書をチラ見してるけどフィボナッチ数列のメモ化だけの例じゃ
理解できない。。。
Hackageの文書みると「モナディックフォームに変換」とかさらりと書いてるので、もしかしてこれを使える
ようになるためにはモナドがちゃんとわかってないといけないんでしょうかね。
Control.Monad.Memoが使える程度のモナド理解のためのオススメ文書などあったらどなたか教えて
頂けないでしょうか。
0194デフォルトの名無しさん
2012/04/27(金) 17:31:00.49どっちのバインディングライブラリが幸せになれるかな
ドザです
0195デフォルトの名無しさん
2012/04/27(金) 18:02:32.57fib 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だと思う。
異なる関数で相互再帰したりする場合はそれぞれ違うメモモナドを使わないとダメっぽいので、モナド変換子を理解してないとちょっとむずいかも。
0196デフォルトの名無しさん
2012/04/27(金) 19:22:43.33いまどれぐらいストップザワールドするんだろう?
0197デフォルトの名無しさん
2012/04/27(金) 21:15:42.26これ、Amazonに登録されてました
0198デフォルトの名無しさん
2012/04/27(金) 21:28:53.03欲を言えば連休中に読みたかった
0199デフォルトの名無しさん
2012/04/27(金) 22:33:02.95そういう時は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とはユーザ層が被らないとばかり思ってました。
0200デフォルトの名無しさん
2012/04/27(金) 23:02:51.550201デフォルトの名無しさん
2012/04/27(金) 23:13:54.700202デフォルトの名無しさん
2012/04/27(金) 23:19:57.80ステルスに失礼だろ
0203199
2012/04/27(金) 23:44:34.50>>199をステマと思った人は自分の判断力がその程度だと自覚してください。
0204デフォルトの名無しさん
2012/04/28(土) 00:26:50.05ていうかこのスレにいるような層で原著知らないやついるんだなあ
自分のアンテナが低レベルだと自覚してください
0205デフォルトの名無しさん
2012/04/28(土) 01:15:00.48日本語版を探している人が原著を知らないと判断した>>204は判断力が低レベル。
ということで、以後何もなかったかのようにどうぞ。
0206デフォルトの名無しさん
2012/04/28(土) 01:15:22.02>>203
>>203
0207デフォルトの名無しさん
2012/04/28(土) 01:54:56.47いやだからさ、「Learn You Haskell 翻訳」 とかでググったら
日本語版のタイトル出てくるよってことなんだが…
そこまで言わんと分からんかね
0208デフォルトの名無しさん
2012/04/28(土) 02:09:15.280209デフォルトの名無しさん
2012/04/28(土) 02:15:34.87ApplicativeとかMonoidの話もあるのか、買いだな
0210デフォルトの名無しさん
2012/04/28(土) 06:33:10.050211デフォルトの名無しさん
2012/04/28(土) 07:34:34.990212デフォルトの名無しさん
2012/04/28(土) 20:07:01.35これって、なんて発音するの?
カフェテラスで議論する時に困る
0213デフォルトの名無しさん
2012/04/28(土) 20:12:31.040214デフォルトの名無しさん
2012/04/28(土) 20:29:16.32HTML がハトマルだから、GADT も何かあるのかと思ってた
ありがと
0215デフォルトの名無しさん
2012/04/28(土) 21:12:57.68いやいや
0216デフォルトの名無しさん
2012/04/28(土) 21:41:36.820217デフォルトの名無しさん
2012/04/28(土) 23:08:53.770218デフォルトの名無しさん
2012/04/28(土) 23:36:16.790219デフォルトの名無しさん
2012/04/28(土) 23:44:01.61パウドゥって脳内で響くのが治まらない
プワディって呼ぼうかな
0220デフォルトの名無しさん
2012/04/29(日) 00:27:16.780221デフォルトの名無しさん
2012/04/29(日) 02:34:16.91ありがとうございます。モナドをもう少し真面目に勉強してみます。
0222デフォルトの名無しさん
2012/04/29(日) 10:54:07.47> GenericなADTだからじーえーでぃーてぃーが自然な発音だろうけど、俺は最初ガッドって読んじゃってこの発音が離れない。
私もこれ
0223デフォルトの名無しさん
2012/04/29(日) 12:25:33.10この書籍、後半部分に誤植が多発してるね
0224デフォルトの名無しさん
2012/04/29(日) 12:40:02.360225デフォルトの名無しさん
2012/04/29(日) 12:53:35.88モナド変換子はマジむずい。
あれは理屈を理解するよりも、コンパイルして怒られてを繰り返して体で覚えた方がはやいかもしれない。
まずはliftIOだけ使って、コードのどの部分がどんな型になってんのか把握できるようになるまでガンバレ。
0226デフォルトの名無しさん
2012/04/29(日) 14:07:50.000227デフォルトの名無しさん
2012/04/29(日) 14:22:11.84ところで、Arrow の利用って FRP かパーサーくらいしかないの?
0228デフォルトの名無しさん
2012/04/29(日) 14:46:37.22しかしComonadはArrowよかさらに文献が少ないと言うw
0229デフォルトの名無しさん
2012/04/29(日) 15:41:09.55Arrowの導入は「関数プログラミングの楽しみ」に1章分だけど出てる
印象としては抽象度が高すぎてかえって使いづらい
始めからArrowとして設計されてたら、もっと使い勝手がよかったと思う
0230デフォルトの名無しさん
2012/04/29(日) 16:03:42.43うん、持ってる
> 抽象度が高すぎて
まさにこれ、やさしいとは言いがたい
ネット上の解説も、回路図で first とか right とか説明して、
最後にこれが大ボスと言わんばかりに loop をちょろっと解説して終わりなのが多い
しかも、どれも抽象的
なんかこう、実例みたいなのが無いんだよなぁ
ひとつ論文で、パーサーの例を挙げて、
こうすればスペースリークを防げるよねって解説があったけど、
あれがまだましな方だったな(論文の方が分りやすいってどうよと思うが)
0231デフォルトの名無しさん
2012/04/29(日) 16:57:45.72__
((((((((((束縛) ) ) )参照) ) ) ) ) )
スコープ的にどうなってんの?
右結合だったら自然に見える事は理解できるんだが
_______________________
( ( (束縛( ( ( ( ( (参照(´・ω・`))))))))))
0232デフォルトの名無しさん
2012/04/29(日) 17:10:59.47モナド則でこうなってるから
(m >>= f) >>= g == m >>= (\x -> f x >>= g)
0233デフォルトの名無しさん
2012/04/29(日) 17:21:25.38(>>=)は左結合だけどdoは右結合だから問題ない
明示的に(>>=)とラムダを使う場合でも、
a >>= \x ->
b >>= \y ->
c
なら、
a >>= (\x ->
b >>= (\y ->
c))
のことだから、やはり問題ない(ラムダ式は可能な限り右まで続く)
>>232
モナド則は関係ない
0234デフォルトの名無しさん
2012/04/29(日) 18:17:44.38……infixl 1と宣言しておきながら、事実上は右結合なんですか?
右結合って短絡可能なんですよね?
Maybeモナドでは
左にNothingなら問答無用でNothing
ってなってるけど
処理が右結合で、途中Nothingに出逢ったら
Real World Haskellではそのまま最後までNothing伝播処理が続くって書いてあった
でも僕の考える限りでは、右結合では右側が判明するまでの必要最低限の努力をするのが遅延評価だから
途中でNothingに出逢った瞬間からスタック巻き戻しのようになると思うのですが……
/\
/\
/\
N /\
/\
:
/\
/\
/\
/\
N
/\
N
Nothing
0235デフォルトの名無しさん
2012/04/29(日) 19:24:55.15構文の話と意味の話をごっちゃにしてないか
左結合(infixl)というのは、あくまで
a >>= b >>= c
というふうに使ったときに
(a >>= b) >>= c
と解釈される、というだけの意味。それ以外の使い方をした場合には関係ない
後半はその通りで、(Nothing>>=f)はfを呼ばないから、たとえばdoの中でNothing
が出て来たらそれ以降は評価すらしない
そのNothingが別のdo(呼び出し元の関数とか)に渡ったときには
Nothingの伝播処理が挟まる
0236デフォルトの名無しさん
2012/04/29(日) 21:27:11.79質問@
Maybe 上で (>>=) あるいは (>>) を使ってたくさんの計算を連鎖するとき、
その計算のどれかが Nothing を返したら、残りの計算は一切評価されません。
しかしこの連鎖は完全には短絡されていないことに注目しましょう。
連鎖中のそれぞれの (>>=) や (>>) は左の Nothing にマッチすると右に Nothing を生成し、
最後までそうしていきます。この点は忘れやすいものです。
連鎖中の計算が失敗したとき、それに続くNothing 値の生成、連鎖、消費は実行時に安価ではありますが、タダというわけではありません。
348 P にこう書いてありますが、私にはこの文脈が左結合を示唆しているかのように見受けられます。つまりは、
/\
/\
/\
N
/\
/\
N
/\
N
Nothing
こう主張しているように思えるのです。短絡は起きていないように思えます。
ここで私のいう短絡とは、関数処理のスキップのみならず木構造の一発切除をも意味します
Nothingに出逢った瞬間全てを忘れて即Nothingです
これは無理なのでしょうか?
0237デフォルトの名無しさん
2012/04/29(日) 21:31:47.75質問A
余談ですが考えてもみれば、左結合は(関数処理は省けても)そのまま最後まで構造が進むしか無いようで、
一方で右結合は構造も短絡できるかのように見えますが、
構造の最後の方でNothingが発生するか、結局最後まで発生しなかった場合を想像すると、
スタック巻き戻しを考慮に入れると、行って戻ることになり、
最後まで構造をなぞるどころかその2倍弱の手間になるかも知れませんね。
より最初の方でNothingが出る期待が高い時は右結合
そうでない時は安定的な左結合が適切なんでしょうか?
Data.List.and と or は右結合で定義されていますが
これは何を意識してのことでしょうか?
and/orの最後の方でFalse/Trueがでるか、あるいは最後まで出ない時、
(これは直感ですが)リストの半分を越えてから結論出せる状況になったら、
正格左結合よりも酷いパフォーマンスになるのではないでしょうか?
スタックを巻き戻すだけというのが、パターンマッチングで値を返す処理に比べて、
凄く速いのならそんな事は無いといえるのでしょうが。
0238デフォルトの名無しさん
2012/04/29(日) 22:32:05.06その辺はRWHよかIntroduction to Functional Programming using Haskellの方が詳しいyp
andやorが右結合なのは無限リスト食わせるとわかる
foldlで定義したら食わせるリストの頭に零因子であるものがあってもスタック食いつぶす
Maybeに関しての短絡はNothing >> forever (Just 1)とかするとわかる
これが木構造とやらを切除しないとなるとサイズが無限である木がメモリ上に存在してスタックオーバーフロー起こす事になる
0239デフォルトの名無しさん
2012/04/29(日) 23:59:04.070240デフォルトの名無しさん
2012/04/30(月) 03:31:17.360241デフォルトの名無しさん
2012/04/30(月) 09:20:17.79「信用」の意味がよく分らないです
Haskell は初心者から、本来あるべきどのような信用がないのでしょうか
0242デフォルトの名無しさん
2012/04/30(月) 09:55:23.07くっそこんなので笑わされるとは
0243デフォルトの名無しさん
2012/04/30(月) 10:03:34.530244デフォルトの名無しさん
2012/04/30(月) 11:13:59.36例えばリテラルからの暗黙の型変換は一部ありますよね
Num.fromInteger 関数とか IsString.fromString 関数を定義しておけば、
リテラル整数や文字列を適切な型にコンパイラが自動的に変換してくれる
(後者は GHC の拡張機能ですが)
これの延長で、例えば OpenGL を使っていて、
GLdouble 型を引数に取る関数を Double 型に適用しようとした時、
何か特別な定義をしておけば、realToFrac 関数を使わずとも、
コンパイラが自動的に変換してくれるとか
このような例だけでなく、一般的に fromIntegral 関数とか realToFrac 関数って、
けっこう目障りなんですよね
これらって、型推論出来るようにコードを書かなければならないという、
どちらかと言うと言語仕様よりの概念じゃないですか
そのわりに、realToFrac 関数だけでは、ぱっと見、何から何への変換か分らない
一方で、これらの関数が使われているコードは、
何を計算するのかという、もっと抽象度の高い概念をコード化しているわけで
抽象度の高いコードの中に、抽象度の低い「おまじない」の様なコードが
けっこう大きな石ころのように混ざっている状況が、なんとも違和感を覚える
どうにかならないものでしょうか
0245デフォルトの名無しさん
2012/04/30(月) 11:26:54.17うーん、言語の設計者より自分の方が頭いいかもしんない、と思われちゃってるところ。
0246デフォルトの名無しさん
2012/04/30(月) 11:45:17.37抽象度とか言いつつ全体が見えていない
0247デフォルトの名無しさん
2012/04/30(月) 11:57:23.83有難うございました(´;ω;)
0248デフォルトの名無しさん
2012/04/30(月) 14:53:15.43上を押しても同じ履歴だった場合、動いてないように見えてストレスとなります
0249デフォルトの名無しさん
2012/04/30(月) 15:06:17.22残念ながら現状ではどうにもならない
なにかストレスを発散する方法を考えてくれ
0250デフォルトの名無しさん
2012/04/30(月) 15:30:36.770251デフォルトの名無しさん
2012/04/30(月) 18:34:46.960252デフォルトの名無しさん
2012/04/30(月) 18:36:44.310253デフォルトの名無しさん
2012/04/30(月) 18:38:36.110254デフォルトの名無しさん
2012/04/30(月) 23:24:32.160255デフォルトの名無しさん
2012/04/30(月) 23:33:00.05・どうやってボタン表示するんですか
・ループが出来ません
・変数変えれないんですけど
そんな質問しねーよ、って人ならもう初心者じゃない
具体的に「Haskellでやりたいこと」を見つけて取り組んでくれ
分かんないことがあったらピンポイントで質問してこい
あたしらが優しく相手してやる
0256デフォルトの名無しさん
2012/05/01(火) 00:09:38.80今生きているHaskellのGLRパーサはありませんか?
0257デフォルトの名無しさん
2012/05/01(火) 03:16:34.46お、お前……女だったのか……。
0258デフォルトの名無しさん
2012/05/01(火) 03:22:27.79具体的には今あるコード資産に対してコード変換して,機能拡張したい,
そのための便利な仕組みない
0259デフォルトの名無しさん
2012/05/01(火) 04:32:54.50いんや?
自分が初心者の頃、親切に教えてもらったぞ?
プログラミングHaskellで最初に詰まって、散々悩んだreplicateのリスト内包表記版を作れって問題とか
初心者でも、replicateの再起版はすぐに思いついたんだが、この頃は本当に頭が固かったな・・・
(ヒントがlengthのリスト内包表記版の応用って書かれてても、全然思い浮かばんかった)
回答してもらって、ああ、なるほど、lengthのリスト内包表記版の応用だ。ってやっと納得できたっけ
そもそもHaskellはRubyとかと違って、組込み関数も自分で簡単に作れるってのが初心者の頃の自分には言語の理解の助けになった
普段自分の使ってる関数の動きを自分で同じ関数作って確認しながら覚えられるから、あんまり基本的過ぎる質問ってする必要が無かったし、
>>255同様、初心者らしい質問って、そもそもHaskell(または関数型言語)ってどんな言語?とか以外じゃ見ない(それも最初のスレだけだったような・・・)
当時の自分の質問が一番初心者らしい質問だったと思う
0260デフォルトの名無しさん
2012/05/01(火) 06:00:09.93深さ優先探索なので,(1,1)の後は事実上フリーズします
これを深さも幅も均衡して広げて探索していくにはどうしますか?
0261デフォルトの名無しさん
2012/05/01(火) 06:38:12.34[(x,y) | x <- [1..], y <- [1..x], 3^x - 2^y == 1 || 3^y - 2^x == 1]
0262デフォルトの名無しさん
2012/05/01(火) 08:47:38.24昔のことは知ってるよ。Part3くらいから居る
>>231を馬鹿にする流れを見て、正気か?と思っただけ
0263デフォルトの名無しさん
2012/05/01(火) 09:44:02.400264デフォルトの名無しさん
2012/05/01(火) 15:45:08.13面白いハックです
ありがとうございました
0265デフォルトの名無しさん
2012/05/02(水) 16:26:57.40条件を満たす最初の要素を束縛するにはどうしますか?
0266デフォルトの名無しさん
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したりすればいいと思うよ。
ただ無限リストなので、条件を満たす要素がなかったら計算が終わらない。
これはしょうがない。
0267デフォルトの名無しさん
2012/05/02(水) 21:56:17.29後者です
findでやってみようと思ったんですが
術語が Int -> IO Bool なんです
filterM みたいに findM があればいいと思いますが
filterMしてheadって不格好です
きっとスマートな解決法がある筈です
0268デフォルトの名無しさん
2012/05/02(水) 22:03:05.12無限のモナドのリストを渡すとフリーズしますよね
最初、遅延評価なのになんで正格評価みたいになってんだと首を傾げたのですが
考えてもみれば、順序を保証するんだからfilterMに無限のモナドのリストを渡すと
そのリストの最後の評価が済むまで次の行けないですよね
困りました
0269デフォルトの名無しさん
2012/05/02(水) 22:20:28.350270デフォルトの名無しさん
2012/05/02(水) 22:54:51.28どうもならん、諦めろ
0271デフォルトの名無しさん
2012/05/02(水) 23:45:26.550272デフォルトの名無しさん
2012/05/03(木) 00:06:04.51find p = listToMaybe . filter p
だぞ。別に filterM して head も似たようなもんじゃないか?
[IO a]でもIO [a]でも無限リストで要素が無ければ止まらないのは
一緒だと思う。
0273デフォルトの名無しさん
2012/05/03(木) 00:27:44.81はい(´・ω・`)
0274デフォルトの名無しさん
2012/05/03(木) 00:29:59.11これは要素があっても[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
0275デフォルトの名無しさん
2012/05/03(木) 05:20:09.91無限リストでfilterMは危険なのか。
0276デフォルトの名無しさん
2012/05/03(木) 06:33:35.38ありがとうございました
filterMに倣って
findM :: Monad m => (a -> m Bool) -> [a] -> m (Maybe a)
版を作って使ってみましたが、何だかソースが汚れた気がします
Maybeを取扱う為に一々letやcaseを挿入しないとならなくなったせいでしょうね
しょうがないでしょうが
ところで何故標準ライブラリに採択されてないのでしょうか
0277デフォルトの名無しさん
2012/05/03(木) 06:38:59.61無限リストに使うなら、停止するとき返り値は
必ずJust xなんだからfromJustで取り出せば?
0278デフォルトの名無しさん
2012/05/03(木) 06:46:35.74これ何の使い道あるんですか?
0279デフォルトの名無しさん
2012/05/03(木) 06:57:09.58そうでした。。。
コードが汚くなったのは別の改変のせいでした
勘違いして findM 導入のせいにしてました
0280デフォルトの名無しさん
2012/05/03(木) 07:10:28.79なんの意味もない
liftM使って……て書き込み見たんでliftMから書き始めたからそうなった
今は反省している
0281デフォルトの名無しさん
2012/05/03(木) 07:26:28.960282デフォルトの名無しさん
2012/05/03(木) 10:41:16.520283デフォルトの名無しさん
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 などという関数であれば正格性フラグを付ける意味はない、
ということでしょうか。
0284デフォルトの名無しさん
2012/05/04(金) 01:11:25.25どちらの質問もその考え方であってる。
ただ、わかってるかもしれないけど、
>単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない
束縛された値が正規形なのかとか、リテラルかどうかとか判断する術は一般にないから、
それらを基に正格性フラグ付けることに、意味がある、ないを判断することはできないし、意味もないよ。
重要なのは、値なりデータ構造なりがどこで構築されて、どこで正規化された値が必要になるのか?
0285デフォルトの名無しさん
2012/05/04(金) 01:24:42.230286デフォルトの名無しさん
2012/05/04(金) 05:16:54.30言語は道具なんだから、習得に時間や労力が必要なら
その言語は道具として劣っているんだよ。
0287デフォルトの名無しさん
2012/05/04(金) 05:52:35.820288デフォルトの名無しさん
2012/05/04(金) 06:47:05.76> この場合、x の値が実際に必要になるかどうかに関わらず、
> X a の a が評価されるという意味でしょうか。
いや、xの値が必要になるまでは評価されない。
> もしかして、g w = if v then 関数1 else 関数2 などと場合分けされていた場合に、
> f = F g の時点でこの v まで評価されて関数1か関数2かが決定されるということであり、
同上。
> 単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない、
> ということでしょうか。
これはそのとおり。
0289デフォルトの名無しさん
2012/05/05(土) 03:45:27.771
2
:
9
[(),(),(),(),(),(),(),(),()]
この最後のゴミを排除するには
>> return ()
をバインドするのが正統ですか?
0290デフォルトの名無しさん
2012/05/05(土) 03:47:18.160291デフォルトの名無しさん
2012/05/05(土) 07:28:01.110292デフォルトの名無しさん
2012/05/05(土) 13:36:55.17C++を窓から放り投げるスレじゃないから
0293デフォルトの名無しさん
2012/05/05(土) 22:21:06.180294283
2012/05/05(土) 23:04:46.88・・・結局、data X = X !Int の正規化フラグを付けるのと付けないのとで、
何が変わるのでしょうか?
data X = X !Int
・・・
let x = X a
>>284
> どちらの質問もその考え方であってる。
>>288
> いや、xの値が必要になるまでは評価されない。
どちらが正解なんですか。
それとも、お二方も同じ事を言っているのでしょうか。
a の評価のタイミングはいつなんでしょう?
>>284
> 束縛された値が正規形なのかとか、リテラルかどうかとか判断する術は一般にないから、
> それらを基に正格性フラグ付けることに、意味がある、ないを判断することはできないし、意味もないよ。
たしかに。
いや、ライブラリのソースを読んでいて、正規化フラグ付きの関数を持ったデータ型があって、
どういう意図・狙いでフラグを付けたのかなと思いました。
0295デフォルトの名無しさん
2012/05/06(日) 02:26:01.72main に限らず何かの関数の中で IO を使う関数を利用すれば、その関数の型の出力の部分には絶対に IO が付くという意味なら、 IO は取れない
例外は Debug
もしかして、なにか方法あるのかな?
0296デフォルトの名無しさん
2012/05/06(日) 06:18:40.65trace付けて確認すればいいやん。
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
0297デフォルトの名無しさん
2012/05/06(日) 11:10:33.37Scala でもこういうの流行ってるようだし
0298デフォルトの名無しさん
2012/05/06(日) 11:19:04.330299デフォルトの名無しさん
2012/05/06(日) 12:16:00.880300デフォルトの名無しさん
2012/05/06(日) 12:17:22.58一応、標準ライブラリ内に System.IO.Unsafe.unsafePerformIO :: IO a -> a 関数がある
が、これは Simon Marlow と Simon Peyton-Jones の2人以外使ってはいけない
0301デフォルトの名無しさん
2012/05/06(日) 15:11:42.010302デフォルトの名無しさん
2012/05/08(火) 22:24:51.66Graham Hutton著・山本和彦訳の「プログラミングHaskell」がいいっぽいけど、実際どうなの?
0303デフォルトの名無しさん
2012/05/08(火) 22:27:58.33対抗馬になりそうなのが今月出る「すごいHaskellたのしく学ぼう」
0304デフォルトの名無しさん
2012/05/08(火) 22:32:20.780305デフォルトの名無しさん
2012/05/09(水) 00:22:24.170306デフォルトの名無しさん
2012/05/09(水) 00:38:56.55ゾウさん本にはその辺期待してる
0307デフォルトの名無しさん
2012/05/09(水) 00:52:04.110308デフォルトの名無しさん
2012/05/09(水) 01:06:20.12寿司本?
0309デフォルトの名無しさん
2012/05/09(水) 01:12:32.860310デフォルトの名無しさん
2012/05/09(水) 01:19:18.62いやなんとなく
0311デフォルトの名無しさん
2012/05/09(水) 01:22:38.350312デフォルトの名無しさん
2012/05/09(水) 03:25:04.440313デフォルトの名無しさん
2012/05/09(水) 07:14:00.90それとも、大幅に加筆されてる?
0314デフォルトの名無しさん
2012/05/09(水) 08:22:56.77fnmatch :: (RegexLike Regex source1) => String -> source1 -> Bool
というのがあります。
ここの(RegexLike Regex source1)というクラス制約にある、A B a という形は
どのようなクラス宣言をすれば、このような形になるのでしょうか?
0315デフォルトの名無しさん
2012/05/09(水) 11:56:14.66ttp://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
0316デフォルトの名無しさん
2012/05/09(水) 11:57:01.10ttp://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
0317デフォルトの名無しさん
2012/05/09(水) 11:59:11.96ついでに訂正しておくと、多変数型クラスより多引数型クラスのほうが訳語として一般的みたいだ。
0318デフォルトの名無しさん
2012/05/09(水) 12:45:02.58d
何故か、hackage.haskell.orgにつながらなくてソースは見られないのですが、
MultiParamTypeClassesというLANGUAGEプラグマをつければ、class宣言に複数の変数を
取ることができるんですね。
0319デフォルトの名無しさん
2012/05/11(金) 09:10:35.85fact n = n * fact (n - 1)
ふと思ったのですが、もし(階乗を知らない人が)負数を突っ込んだら死にますよね。
階乗は例えがアレですけどこういうケースのように、パターンマッチで任意の条件分岐(n < 0とか)できますか?
0320デフォルトの名無しさん
2012/05/11(金) 09:16:44.54if-then-else式を使って、やりたいことはできる、と思う
0321デフォルトの名無しさん
2012/05/11(金) 09:17:54.53エラーが起きる値が返るから、それを使えばいい
0322デフォルトの名無しさん
2012/05/11(金) 09:36:25.120323デフォルトの名無しさん
2012/05/11(金) 09:41:06.61fact :: Int -> Int
fact (n)
| (n < 0) = undefined
| (n == 0) = 1
| (n >= 1) = n * fact (n - 1)
0324デフォルトの名無しさん
2012/05/11(金) 10:17:08.88fact n =
case n `compare` 0 of
LT -> undefined
EQ -> 1
GT -> n * fact (n - 1)
0325デフォルトの名無しさん
2012/05/11(金) 10:46:13.790326デフォルトの名無しさん
2012/05/11(金) 10:51:34.61fact n | n<0 = undefined
fact 0 = 1
fact n = n * fact (n-1)
0327デフォルトの名無しさん
2012/05/11(金) 10:51:35.520328デフォルトの名無しさん
2012/05/11(金) 11:11:11.43どうしてこうなった…w
0329デフォルトの名無しさん
2012/05/11(金) 11:53:25.130330デフォルトの名無しさん
2012/05/11(金) 15:47:59.33check p f n = if p n then f n else undefined
fact 0 = 1
fact n = n * fact (n-1)
0331デフォルトの名無しさん
2012/05/11(金) 16:13:00.230332デフォルトの名無しさん
2012/05/11(金) 16:36:37.12ドメインて何?
0333デフォルトの名無しさん
2012/05/11(金) 16:57:47.03fact n = factSafe !! n
0334デフォルトの名無しさん
2012/05/11(金) 17:33:59.09定義域
例えば浮動小数点や有理数を渡した時に、
コンパイルエラーも含めて健全な定義になっているかということを言っていると思う。
0335デフォルトの名無しさん
2012/05/11(金) 17:39:05.800336デフォルトの名無しさん
2012/05/11(金) 17:59:32.33初心者の私に解説してplz
0337デフォルトの名無しさん
2012/05/11(金) 20:24:45.91それscanlでできるよ!
fact = (!! n) $ scanl (*) 1 [1..]
あと(!!)使ったらSafeじゃないだろ…
0339デフォルトの名無しさん
2012/05/11(金) 20:42:03.980340デフォルトの名無しさん
2012/05/11(金) 21:31:34.770341デフォルトの名無しさん
2012/05/11(金) 22:47:56.840342デフォルトの名無しさん
2012/05/11(金) 22:59:19.960343デフォルトの名無しさん
2012/05/11(金) 23:45:33.49Haskellの組み込み関数と同等の機能を
練習のために実装してみると、組み込み
のものより桁違いに遅い事があります。
組み込みの方の実装を見るためには
どうしたらいいでしょうか?
0344デフォルトの名無しさん
2012/05/12(土) 01:17:34.230345デフォルトの名無しさん
2012/05/12(土) 01:47:10.63Hackageのリファレンスからソース落とせる。
baseパッケージなら↓の一番下
http://hackage.haskell.org/package/base-4.5.0.0
大抵は各関数の横にsourceってリンクが付いててHTML化されたソースを見ることができる。(全てのコードが辿れるとは限らないけど)
ただまぁ、融合変換とか正格性評価とかアンボックス型とか、かなり上級な内容もてんこ盛り。
他の言語でもそうだけど、基本ライブラリほど難しいっていう…。
0346デフォルトの名無しさん
2012/05/12(土) 03:31:29.92有難うございます!
http://hackage.haskell.org/packages/archive/pkg-list.html
パッケーリスト(↑)には何に使うのか想像もつかないもの(Conduitとか)が
沢山有りますね。
取り敢えず、ヤル気が持続しそうなもの(Animationなど)を見てみます。
0347デフォルトの名無しさん
2012/05/12(土) 13:41:30.610348デフォルトの名無しさん
2012/05/12(土) 13:47:08.270349デフォルトの名無しさん
2012/05/12(土) 19:38:57.180350デフォルトの名無しさん
2012/05/12(土) 19:40:08.850351デフォルトの名無しさん
2012/05/12(土) 22:43:14.15ttp://www.haskell.org/
0352デフォルトの名無しさん
2012/05/13(日) 00:31:44.86今は全く問題なく開くが・・・
まぁ、HaskellPlatform-2011.4.0.0-setup.exe のダウンロードは
確かに遅いと思うけど、繋がらないことはないだろ
haskell.org はたまにクソ重いときあるから、
時間をおいて何度か試してみなよ
0353デフォルトの名無しさん
2012/05/13(日) 00:40:54.910354デフォルトの名無しさん
2012/05/13(日) 00:50:09.290355351
2012/05/13(日) 01:03:27.63ダウンロードどうこうというか、サイトに全く繋がらない状態が続いてる
サイトが落ちてるわけじゃないようなので、時間をおいて再試行してみる
0356デフォルトの名無しさん
2012/05/13(日) 01:22:13.540357デフォルトの名無しさん
2012/05/13(日) 01:29:11.16たしかに繋がらない
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 を直接開けばいいと思う
0358デフォルトの名無しさん
2012/05/13(日) 11:58:28.57ここに移動したんじゃねぇの?
0359351
2012/05/13(日) 20:13:03.61しばらくこれで遊ぶわ
0360デフォルトの名無しさん
2012/05/19(土) 04:49:47.87http://ec2.images-amazon.com/images/I/513ipzNg22L._SS500_.jpg
スシやらタワーについて許可は取ったのだろうか
0361デフォルトの名無しさん
2012/05/19(土) 07:56:41.290362デフォルトの名無しさん
2012/05/19(土) 13:27:18.600363デフォルトの名無しさん
2012/05/19(土) 13:34:52.410364デフォルトの名無しさん
2012/05/19(土) 14:42:34.01原作者にはウケてたらしいぞ
0365デフォルトの名無しさん
2012/05/19(土) 19:04:09.46ほんと?そういう話でもないかと思ってぐぐったんだけど見つからなくて
原書と日本語版のタイトルについての話なら見つかった
http://groups.google.com/group/haskell-cafe/browse_thread/thread/29274a7b6a4fddd4/45fbde1d2d1d0322
0366デフォルトの名無しさん
2012/05/19(土) 19:06:45.100367デフォルトの名無しさん
2012/05/19(土) 20:02:20.480368デフォルトの名無しさん
2012/05/20(日) 00:44:00.620369デフォルトの名無しさん
2012/05/20(日) 12:07:52.76(1.0未満のバージョンは少なくとも公には無かったと思う)
A History of Haskell
http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
ちなみに、それに先立ち、委員会で言語の名前をあれこれ考えるんだが、
Haskell に決まった後、旦那さんの名前を使っていいかと奥さんに訪ねに行くんだ。
その心遣いが暖かくて、上記pdfのこのくだりは結構好きだ。
0370デフォルトの名無しさん
2012/05/20(日) 13:41:28.710371デフォルトの名無しさん
2012/05/20(日) 13:51:57.710372デフォルトの名無しさん
2012/05/20(日) 14:23:19.930373デフォルトの名無しさん
2012/05/20(日) 16:31:59.270374デフォルトの名無しさん
2012/05/21(月) 08:24:16.49すかいつりーのデザイン使うのはダメとか言われたらしいよ
0375デフォルトの名無しさん
2012/05/21(月) 08:34:21.970376デフォルトの名無しさん
2012/05/21(月) 09:08:20.970377デフォルトの名無しさん
2012/05/21(月) 09:21:15.130378デフォルトの名無しさん
2012/05/22(火) 07:21:03.780379デフォルトの名無しさん
2012/05/22(火) 07:22:12.91あのうんこビルすごいよな。でもトーキョー近辺に住んでる連中しか知らんのでは?
東京はすごいよな。
うんこビルに新宿の座薬ビル なんでもありだ
0380デフォルトの名無しさん
2012/05/22(火) 08:24:28.930381デフォルトの名無しさん
2012/05/22(火) 10:19:44.110382デフォルトの名無しさん
2012/05/22(火) 11:08:16.000383デフォルトの名無しさん
2012/05/22(火) 13:11:48.56東京使いすぎー
0384デフォルトの名無しさん
2012/05/22(火) 13:22:52.22さいたまタワーの方がよかったよなー
土地まで用意したのによー
0385デフォルトの名無しさん
2012/05/22(火) 17:01:44.09Haskellでwindowsのcomを使う、具体的にはHaskellからExcelを
使いたいのですが、サンプル等はありませんか?
haskellscriptやhdirectは公式からもページが見れず、
com-1.2.3はインストールができてもあまりexcelを操作するような
サンプルが発見できませんでした。
0386デフォルトの名無しさん
2012/05/22(火) 21:19:18.780387デフォルトの名無しさん
2012/05/22(火) 22:42:49.91com パッケージの公式サンプル
http://haskell.forkio.com/com-examples
ここに WMI にアクセスするサンプルがある。
(完全なソースも zip になってる)
COM のインターフェースを取得する方法も、
そのメソッドを呼ぶ方法も、必要な情報はほぼ入ってないか?
COM の基礎が分っていれば簡単に Excel に応用できると思うんだが・・・
このサンプル見てピンとこないのなら、とりあえず Haskell は置いておいて、
VBスクリプトとかから COM にアクセスする方法を調べてみると良い。
COM に対するアクセスの要領はほとんど同じだと気づくはずだ。
(オートメーションを扱える言語なら何でも良いが VBS が一番イメージが近いと思う)
厳しいことを言うようで悪いが、Haskell に限らず、
自分がやりたいことをピンポイントで例示するサンプルなんてまず無いぞ。
サンプルを弄ったり、自分で極簡単なCOMを作ってアクセスしてみたりして、
少しずつ理解していくことを勧める(「勉強」をしているのならの話だが)。
0388デフォルトの名無しさん
2012/05/23(水) 06:58:19.48ありがとうございます。確かに、そのサンプル見てもよくわからず・・・
基本がなっていないみたいです。
まずはCOMの基本的な部分からゆっくり勉強していきます!
0389デフォルトの名無しさん
2012/05/23(水) 13:49:05.42マチクタビレタ〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < Haskell Platform の stable release まだ〜?
\_/⊂ ⊂_ ) \________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
0390デフォルトの名無しさん
2012/05/23(水) 22:08:37.740391デフォルトの名無しさん
2012/05/23(水) 22:13:49.970392デフォルトの名無しさん
2012/05/23(水) 22:18:58.27これだから地方は
0393デフォルトの名無しさん
2012/05/23(水) 22:22:22.73メモ化に関するその周辺技術や考え方
FRP に関するその周辺技術や考え方
ジェネリックなデータ型や関数などの考え方
スペースリークに関するメカニズムや対策
Stream Fusion などを含む最適化の考え方や仕組み
というような辺りの話はなんで書籍にならないんだろ
どれでも、それ単体で本が書けてしまえるほど豊富な内容を含んでいるのに
0394デフォルトの名無しさん
2012/05/23(水) 23:21:06.12PDFでも販売してるよ
http://estore.ohmsha.co.jp/titles/978427406885P
0395デフォルトの名無しさん
2012/05/24(木) 07:46:46.57すごいH本。。。 巨乳や万筋だらけかと思うぞw
0396デフォルトの名無しさん
2012/05/24(木) 07:51:57.42ふつうのHaskellプログラミング --> ふつうのH
Real World Haskell --> 実践H
入門Haskell --> 入門H
0397デフォルトの名無しさん
2012/05/24(木) 08:01:07.46Little Schemerでも写経して心を鎮めるとしよう
0398デフォルトの名無しさん
2012/05/24(木) 08:50:42.90まあ、twitterのネタだからな
0399デフォルトの名無しさん
2012/05/24(木) 12:39:35.570400デフォルトの名無しさん
2012/05/24(木) 13:15:48.660401デフォルトの名無しさん
2012/05/24(木) 15:04:50.830402デフォルトの名無しさん
2012/05/24(木) 21:00:22.24みんなのPython
やさしいRuby
すごいHaskell ← new!
0403デフォルトの名無しさん
2012/05/25(金) 07:02:59.990404デフォルトの名無しさん
2012/05/25(金) 07:53:50.130405デフォルトの名無しさん
2012/05/25(金) 07:56:30.09プログラミングHaskellかどっち買うのが正解?
0406デフォルトの名無しさん
2012/05/25(金) 08:29:14.46Oh!Python って本を。Oh!Xがあったんだから。
0407デフォルトの名無しさん
2012/05/25(金) 08:29:58.560408デフォルトの名無しさん
2012/05/25(金) 08:35:30.56>>405
Learn Youの原著は編集前のがWebで読める
プログラミングHaskellは薄くて簡潔で練習問題付き
お好みに合わせてどうぞ
0409デフォルトの名無しさん
2012/05/25(金) 12:59:37.970410デフォルトの名無しさん
2012/05/25(金) 13:37:19.64さつばつScala
0411デフォルトの名無しさん
2012/05/25(金) 14:14:28.87Learnは内容はいいけど、訳がどうかが問題。これだけは見てみないとわからない。
山本さんみたいに訳せてるかどうか
0412デフォルトの名無しさん
2012/05/25(金) 14:57:09.79とても特殊な場合とはどんな場合なんでしょうか?
0413デフォルトの名無しさん
2012/05/25(金) 18:04:21.990414デフォルトの名無しさん
2012/05/25(金) 18:10:07.540415デフォルトの名無しさん
2012/05/25(金) 18:26:23.52その筋の人だ!
0416デフォルトの名無しさん
2012/05/25(金) 18:53:57.14裏街道ばかり来てるな。
0417デフォルトの名無しさん
2012/05/25(金) 19:32:56.19>>411
元々のお二人の訳も素晴らしいのですが、さらにかなりレビューされていて
とてもわかりやすくて良いと思います。
ただ、原文のブロークンな調子を踏襲して訳されているので、
そういうのが嫌いな方には不向きかも知れません。
内容的には、すごいH本の方が、関数型言語の初心者には
分かりやすいと思います。
0418デフォルトの名無しさん
2012/05/25(金) 19:41:28.34大まかで良いので教えていただけるとありがたいです
0419デフォルトの名無しさん
2012/05/25(金) 19:50:41.63普通でない人は、*.cabal ファイルをテキストエディタで修正する。
私は普通でない人なんで、どんどん書き換える。
もちろん異常が無いかどうかはできるだけ検証するが。
0420デフォルトの名無しさん
2012/05/25(金) 22:05:05.22フリー版+3000円の価値があるかが問題…
0421デフォルトの名無しさん
2012/05/25(金) 22:22:11.53もし主目的が、Haskell の関する他人の文章を楽しむことではなく、
あくまで Haskell を学ぶことであるまなら、
フリー版でよく分らない部分をここで訊いて、
それでも納得できなければ買う、というのはどうだろうか
0422デフォルトの名無しさん
2012/05/25(金) 23:00:34.35オーム社でやってるレビュー方式には参加したことがあるからだいたい雰囲気分かるわ。藁
訳は期待してるわ。by 411
0423デフォルトの名無しさん
2012/05/25(金) 23:02:51.97英語の洋書に一度は手を出したい→原著サイトでしばらく格闘してみる。
オンラインで読むのは嫌目がしょぼしょぼするし、頭に入るきがしない。英語は好き→原著でどうぞ
英語は苦手。→強烈なH本をどうぞ。
0424デフォルトの名無しさん
2012/05/26(土) 18:43:17.15http://estore.ohmsha.co.jp/titles/978427406885P
0425デフォルトの名無しさん
2012/05/26(土) 22:19:42.130426デフォルトの名無しさん
2012/05/26(土) 23:21:27.870427デフォルトの名無しさん
2012/05/26(土) 23:46:47.63ttp://d.hatena.ne.jp/keigoi/20120526/sugoih
0428デフォルトの名無しさん
2012/05/27(日) 15:53:38.46探せど探せど見つからなくて困ってます。
0429デフォルトの名無しさん
2012/05/27(日) 16:04:40.54意味が分らん。
cabal ファイルは Linux も Windows も関係ないだろ。
自分でパッケージを作りたいのなら cabal ファイルも自分で書くし、
Hackage から落としてきたパッケージなら展開したディレクトリ内に入ってる。
0430デフォルトの名無しさん
2012/05/27(日) 18:58:41.69ディストリのパッケージになってる奴の*.cabalファイルならソースパッケージを展開すると入ってると思います。
0432デフォルトの名無しさん
2012/05/28(月) 02:19:34.53*** 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> "
設定も反映されないし、よくわからん。
0433デフォルトの名無しさん
2012/05/28(月) 02:57:35.460434デフォルトの名無しさん
2012/05/28(月) 07:48:02.06ワーニングの英語には、これと似た内容が書いてある。
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
それでも分からなかったら、ワーニングの一部コピペしてググってみよう。
0435デフォルトの名無しさん
2012/05/28(月) 11:53:23.620436デフォルトの名無しさん
2012/05/28(月) 20:58:20.92ボスキャラでも登場するのか
0437デフォルトの名無しさん
2012/05/28(月) 21:11:31.730438デフォルトの名無しさん
2012/05/28(月) 21:18:48.900439デフォルトの名無しさん
2012/05/28(月) 21:20:36.83へいおまち
http://www.youtube.com/watch?v=lySjinT6f0A#t=1m55s
0440デフォルトの名無しさん
2012/05/28(月) 21:22:04.36そりゃもっともだと思うと同時に、そういう話じゃねぇだろと思ったな。
0441デフォルトの名無しさん
2012/05/28(月) 21:33:48.96とか今では言われているが
0442デフォルトの名無しさん
2012/05/28(月) 21:42:05.41修正の必要はない
0443ぬるぽ
2012/05/28(月) 22:03:46.93nativeの発音聞いたことないけど
0444デフォルトの名無しさん
2012/05/28(月) 22:16:32.090445デフォルトの名無しさん
2012/05/28(月) 22:28:44.290446デフォルトの名無しさん
2012/05/28(月) 22:44:59.51エディットコントロールをエジットコントロールと言っていて、
もの凄く違和感を覚えた記憶がある。
でもよく考えてみれば、エジソンと同じなんだよな。
0447デフォルトの名無しさん
2012/05/28(月) 22:46:22.72アメリカ人は普通にバーリボーだったけどなぁ。
0448デフォルトの名無しさん
2012/05/28(月) 23:34:37.100449デフォルトの名無しさん
2012/05/28(月) 23:38:13.93下記のことがラッパーでは実現不可能なら一から作ることになる。
例えば、ボタンを押すとラベルの文字が変わる処理を記述したい場合、
素の gtk2hs や wx なら、ボタンのイベントハンドラに登録した関数内で、
ラベルのプロパティに対して set 関数を使って値を書き換える感じだと思う。
これはあまりに手続き的でムカムカしてくる。
こうではなく、ボタンのイベントに反応するプロパティ型を作り、
それをラベルのプロパティに最初に設定した後は変更(再設定)しない。
イベントが起きなくても、起きても、自動的に文字が設定される。
プログラマはイベント時に何が起きるかを時系列にそって設定するのではなく、
プロパティが何に対してどう反応し、どう変化するかを定義する。
これができれば、いくぶん宣言的で心地よい。
私みたいな者が考える事なんて既にいろんな人が考えていると思うんだが、
このような仕組みを作る上で、参考になりそうな資料はないだろうか。
0450デフォルトの名無しさん
2012/05/28(月) 23:48:03.500451デフォルトの名無しさん
2012/05/29(火) 08:41:21.130452432
2012/05/29(火) 09:40:44.70chmod 700 Haskell/
で解決した。
Haskell/もパーミッションいじらないといけなかった。
なんで設定ファイルがない時は普通に動くのに、
設定ファイルを置くと警告が出るのか意味がわからない。
0453デフォルトの名無しさん
2012/05/29(火) 09:44:25.92できない文盲です、って大声で自分で言いふらして嬉しいのか?
0454デフォルトの名無しさん
2012/05/29(火) 10:09:31.31初心者でごめんね。
0455デフォルトの名無しさん
2012/05/29(火) 10:15:28.140456デフォルトの名無しさん
2012/05/29(火) 10:48:28.720457デフォルトの名無しさん
2012/05/29(火) 11:32:31.620458デフォルトの名無しさん
2012/05/29(火) 12:02:42.500459デフォルトの名無しさん
2012/05/29(火) 12:48:14.86初期化スクリプトみたいなファイルを誰でも編集可能だと、たとえば自分の
ファイルを全部消す、みたいな悪意ある記述を追加されるかもしれない、
という前提を知らないと、英語が読めてもわからないかもしれない。
ていうか >>434 を華麗にスルーしちゃダメだろ。
0460デフォルトの名無しさん
2012/05/29(火) 12:52:44.84まだ調べ始めたばかりだけど、求めているモノとは何となく違う感じがする。
decorator の機能を使ってイベント処理している例をいくつか見てみたけど、
結局イベントハンドラの中で描画関数を呼んだり、計算したりしている。
つまり、>>449 の「素の gtk2hs や wx なら」の部分と
本質的に何も変わらないのではないだろうか。
もちろん、自分でももう少し詳しく調べてはみるが。
>>451
言葉が足りず申し訳ない。
これが FRP の一つの形態になっている事は分ってた。
(リアクティブシステムの構築を関数型っぽく記述する事)
Haskell で使えるFRPライブラリにも色々あって、
たとえば Yampa の仕組みや実装をいくら調べたところで
>>499 のような事の実現に直接役立つわけではない(実際色々調べた)。
>>499 に繋がるような何かキーワードはないだろうか。
0461デフォルトの名無しさん
2012/05/29(火) 15:16:16.96Prelude> succ 1.000022342
2.0000223420000003
0462デフォルトの名無しさん
2012/05/29(火) 15:27:06.590463デフォルトの名無しさん
2012/05/29(火) 15:36:37.09リアクティブプログラミングする仕組みを導入すると
正に>>449のような書き方になるね。
しかし、あれをHaskellでどうやったら再現できるのかはさっぱりわからん。
やってる事は、依存関係のあるキャッシュの管理と似てるので
キャッシュを持つサーバの仕組みなんかが参考になりそうだが・・・
0464デフォルトの名無しさん
2012/05/29(火) 16:02:10.76色々調べてたのなら既知かもしれんが
プロパティを設定するというのはwxパッケージの提供するインタフェースに似てるな
このプロパティは実質IO aとa -> IO ()のペアにすぎんのだけど、それなりに>>449で述べてるようなのに近いように思う
これとFRPの組み合わせはreactive-banana-wxパッケージでプロパティやイベントをEventやBehaviorとして
リアクティブシステム内で扱えるような補助関数を提供してる
参考になる記事としてはreactive-bananaの作者のblogとか
0465449, 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 になるものだ
0466デフォルトの名無しさん
2012/05/29(火) 22:36:50.20w :: 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パッケージ直接叩いてこういうインターフェースの高水準ライブラリ書くのは可能な筈
0467デフォルトの名無しさん
2012/05/29(火) 22:42:05.220468デフォルトの名無しさん
2012/05/29(火) 23:08:01.19[1,3,5]
*Main> ['1','3'..'6']
"135"
*Main> [1.0,3.0..6.0]
[1.0,3.0,5.0,7.0]
なんでFloatのリストでやったときだけこうなるの?
0469449, 460
2012/05/29(火) 23:21:17.86text :: Prop w String
これらは Prop ではなく Attr なのでは?
それはともかく、具体的なアイデアありがとう。
イメージとしてはかなり近いと思う。
参考にして考えてみる。
0470449, 460
2012/05/29(火) 23:22:12.75それも一部に含まれているが、ちょっと違う。
手続き型と宣言型の違いが明確に現れるようにイベントハンドラを例にしたが、
あるプロパティの値が依存する先(ソース)はイベントハンドラだけではなく、
別のウィジェットのプロパティという可能性もある。
例えば、何か絵をプレビューするウィジェットの enable プロパティが、
複数のチェックボックスのプロパティに依存していたり。
この場合、手続き型なら、両方のチェックボックスの check プロパティを調べ、
両方 True ならプレビューウィジェットの enable プロパティを True にする、
という処理を両方のチェックボックスのイベントハンドラに記述する。
(当然実際は、同じひとつのイベントハンドラを両方に設定するなど省力化するが)
これを、例えば次のように記述できたら宣言的で分りやすいと思う。
(擬似的に wx っぽく書くと)
p <- image w [ enable := checked c1 <&> checked c2 ]
本質的には、イベントの発生やプロパティの変化を「伝搬」させたい。
それができれば部品単位でイベントハンドラを書くこともできる、という事。
0471デフォルトの名無しさん
2012/05/29(火) 23:42:10.94きっと難しくなる要因は純粋言語だというところにありそう。
0472449, 460
2012/05/29(火) 23:52:06.14すまん例が悪かったか。
べつに手続きっぽく書くのが難しい訳ではない。
observerパターンの様に書くこともできる。
私が単に関数型言語で手続きっぽく書くのをキモイと感じるから、
なんとか宣言的に書けないかと、そっちの方で苦心してるだけだ。
私がもし純粋でない OCaml にはまっていても、
きっと同じように宣言的に書けないか考えていたと思う。
0473デフォルトの名無しさん
2012/05/30(水) 00:10:30.62editはエディットです
0474デフォルトの名無しさん
2012/05/30(水) 04:38:33.680475デフォルトの名無しさん
2012/05/30(水) 05:55:52.9972倍の高速化ならよく聞く話。
0476デフォルトの名無しさん
2012/05/30(水) 05:57:49.10http://qiita.com/items/a372458d171e373285b1
これとか当社比400倍とか
0477デフォルトの名無しさん
2012/05/30(水) 07:00:18.280478デフォルトの名無しさん
2012/05/30(水) 13:39:02.030479デフォルトの名無しさん
2012/05/30(水) 14:15:16.61DPが動的計画法のことだと知るまで5分も費やしてしまった
GTAに至ってはグランドセフトオート (ry
0480デフォルトの名無しさん
2012/05/30(水) 14:28:51.43たのしく学ぼう! ||
人 _ |-|
旦/○\日
目 ァイリ |-|
/ ̄ ̄ ̄ ̄ ̄\
□-□ U |
| .|ι |
旦ノノ||  ̄ ̄ ||
AAなんてあったのね
0481デフォルトの名無しさん
2012/05/30(水) 15:27:23.39さっき本屋で見てきたんだけど、B5大型本を想像していたので文庫本+αのサイズが意外だった。電車の中でも読めるね。
中身も読みやすく編集されているようで、これからHaskellやって見ようという人にはお勧めだと思う。
ステマでした
0482デフォルトの名無しさん
2012/05/30(水) 16:13:11.04でも...お高いんでしょう?
0483デフォルトの名無しさん
2012/05/30(水) 16:19:47.250484デフォルトの名無しさん
2012/05/30(水) 17:21:21.37あと今すごいH本第一章読み終わったけど
結構誤植があった。
0485デフォルトの名無しさん
2012/05/30(水) 17:51:41.910486デフォルトの名無しさん
2012/05/30(水) 18:14:21.05やめとけよ
そこの場所のリファクタリング始めたら「引力」だって存在しねーし
熱エネルギーも存在しねーから
その部分は俺が研究してきた事と酷似する
俺はアルゴリズムの中から、変数を抹消し、
ソースコードは再帰で圧縮
そして残ったものは、何もなかった
1が残ると思ってたが、予想を超えて、「それ」は0になった
重力がいらないとかいっちゃうと、0に近づくんだよ
わかるか
いらなくないんだよ
元々、何もないところに「重力」ってものを「わざわざ」冗長させて定義したんだよ
何もわかってねーな科学者
リファクタリングし続けた後に、宇宙に存在する最後の1とは、時空のねじれによって出来る固体のみで
その時空のねじれを解けば1であった存在は0になり、文字通りなにもなくなる 世界の終わり
0487デフォルトの名無しさん
2012/05/30(水) 18:16:30.430488デフォルトの名無しさん
2012/05/30(水) 18:35:37.430489デフォルトの名無しさん
2012/05/30(水) 19:26:23.540490デフォルトの名無しさん
2012/05/30(水) 20:12:32.98コードがなくなる話。
0491449, 460
2012/05/30(水) 20:38:17.19Float と 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 で終わる。
こういう仕様になっている理由は、本当のところは正直よく分らない。
一応理由として思いつくのは、浮動小数点による誤差の蓄積の問題を回避するため
ではないかという事。
0492デフォルトの名無しさん
2012/05/30(水) 20:57:45.88最後は唯の数式になるって話でしたよね
バグ0で何よりも高速に動作し使用メモリも0
0493デフォルトの名無しさん
2012/05/30(水) 21:28:17.18そんな話題があったな。
0494デフォルトの名無しさん
2012/05/31(木) 01:03:20.681 == 1
上と下が同じなのは面白いなぁ。
0495337
2012/05/31(木) 02:37:13.13(== 1) 1
全部同じ (^^)
0496デフォルトの名無しさん
2012/05/31(木) 07:43:22.77誤植が多少あったけど、日本語訳に違和感はなかった。
PerlとJavaScriptで自サイトを作ってる趣味プログラマーだけど、プログラミングの幅を広げようと
思い、プログラミングHaskell -> Real World Haskellの半分までを読んでから、すごいHを読んだ。
後半は全くの初心者には、やっぱりちょっと難しいかなと思った。
これから、Real World Haskellの残り半分を読みます。
0497デフォルトの名無しさん
2012/05/31(木) 08:34:14.43直訳のままじゃねーの?って所が所々あったよ。
0498デフォルトの名無しさん
2012/05/31(木) 09:23:22.240499デフォルトの名無しさん
2012/05/31(木) 11:03:03.470500デフォルトの名無しさん
2012/05/31(木) 11:11:02.75p.385 誤:VirePatterns 正:ViewPatterns
0501デフォルトの名無しさん
2012/05/31(木) 12:12:22.41両方を含むリストは作れません。
ここはタプルだろ?
0502デフォルトの名無しさん
2012/05/31(木) 12:13:09.98最下段
ジッパーみたいに一つのリストにします。
ここはタプルだろ?
0503デフォルトの名無しさん
2012/05/31(木) 12:15:22.87bが斜辺より長いような不要なトリプルを調べないような
ここはaだろ?
0504デフォルトの名無しさん
2012/05/31(木) 12:21:40.860505デフォルトの名無しさん
2012/05/31(木) 12:26:11.65"…ペアとトリプル両方を含むリストは作れません。このため、
ベクトルを表すにはタプルを使ったほうがはるかに有利です。"
何もおかしいことは言ってないと思うよ。
p.19上の方では図形を表すのに頂点のリストとして図形を表す試みとして
[[Int]] なんかを考えようとしてる。つまりベクトルをリストとして与えようとしてる。
この方式について検討するとベクトルの表現に使われてるリストは長さ
固定ではないので2次元と3次元のベクトル(頂点データ)が混在したリストが
出来てしまうという難点があることが指摘されている。
一方、頂点の表現としてリストの代わりにタプルを使うならば標準のリストは
homogeneousでなければならないという縛りのおかげで2次元と3次元の
頂点データが混在したリストは作れない事になり、コンパイラがはねてくれる。
[(Int,Int)] か [(Int,Int,Int)]のどっちかになるはずだからな。
そんなわけで
"…ペアとトリプル両方を含むリストは作れません。このため、
ベクトルを表すにはタプルを使ったほうがはるかに有利です。"
という事になる。
0506デフォルトの名無しさん
2012/05/31(木) 12:30:42.06タプルのリストにしてくれるという意味で「一つのリストにしてくれます」と言ってると思うんだけど。
んーあれだな、本気でわからないのか些細な説明省略を鬼首で騒いでるのかわからん。
前者なら真面目に相手するけど後者ならあんま相手にしたくないなぁ。
後者ならSICPの日本語訳がクソすぎる和田は日本語がわかってない
とか該当スレで騒いでるほうが賛同者多くて楽しいと思うよ。
0507デフォルトの名無しさん
2012/05/31(木) 12:36:10.34> とか該当スレで騒いでるほうが賛同者多くて楽しいと思うよ。
YA・ME・TE
SICPスレが機能停止しっぱなしでげんなりしてるんだから
0508デフォルトの名無しさん
2012/05/31(木) 12:46:06.630509デフォルトの名無しさん
2012/05/31(木) 12:55:15.84むしろこっちの詳細はよ
0510502
2012/05/31(木) 12:59:07.14p21の
zipの使用例で作成されているのはタプルだから
一つのタプルにしますという意味のほうが
日本語として自然なのではないですか?
:t zip
zip :: [a] -> [b] -> [(a, b)]
と:tで見ると2つのリストを受け取って、返り値がタプルになってます。
表現方法で、
(a, b)はタプルで
[(a, b)]もタプルですよね。
0511デフォルトの名無しさん
2012/05/31(木) 13:01:16.68いやいや、(a, b)はタプルで[(a, b)]は 「タプルのリスト」だよ
0512デフォルトの名無しさん
2012/05/31(木) 13:02:58.60>>タプルのリスト
p18のタプルの説明で
タプルにはリストと似ている点がいくつかありますが、
リストとタプルには根本的な違いがありますと。
別のものとして説明しているのに
なぜタプルのリストという言葉が出てくるのですか?
0513デフォルトの名無しさん
2012/05/31(木) 13:05:27.09先ほどのベクトル角括弧を丸括弧に変えて、
[(1,2),(8,11),(4,5)]
のようにすれば、タプルになります。
と書いてあります。
0514デフォルトの名無しさん
2012/05/31(木) 13:07:02.52>>511さんが正しいのか。
さてどっちだ?
0515デフォルトの名無しさん
2012/05/31(木) 13:13:15.41p19
この方法の問題点は、[[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>
リストだと通るが、
タプルだと作れません。
0516デフォルトの名無しさん
2012/05/31(木) 13:14:45.79書き込み毎にtwitter上に流れるような仕組みになっているよ。
0517デフォルトの名無しさん
2012/05/31(木) 13:15:48.47「ベクトルの角カッコを丸括弧に変えて」
: つまりベクトルを表すときにリストを使うのではなくタプルを使うように変更して、という事です。
つまり「座標(ベクトル)のリスト」 のデータ型を [ [Int] ] から [ (Int, Int) ] に変更したわけです。
各種の言語で配列的なものを「ベクトル」と呼ぶ事がありますがこの箇所ではそのような
言葉使いはしていません。「ベクトル」は幾何的な座標を指した言葉です。
[Int] は 「整数のリスト」 ですね。
[ [Int] ] は 「「整数のリスト」のリスト」 です。
(Int, Int) は「サイズ2の整数タプル」 ですね。
そして [ (Int, Int) ] は 「「サイズ2の整数タプル」のリスト」 です。
0518デフォルトの名無しさん
2012/05/31(木) 13:16:09.52https://twitter.com/#!/functional2ch
0519デフォルトの名無しさん
2012/05/31(木) 13:18:37.00> We can change our vectors to tuples by surrounding them with parentheses
> instead of square brackets, like this: [(1,2),(8,11),(4,5)].
日本版の正確な引用文がないとなんとも言えないけど
訳すときに複数形がどっかに行ってしまったということじゃないか
0520518
2012/05/31(木) 13:20:13.73PFIで働く社員。妹わんこ系Haskeller。今すぐフォローすべき競技プログラミング界のスーパーエンジニア。
ttp://tanakh.jp/ http://d.hatena.ne.jp/tanakh
が
Functional 2ch (functional2ch) は Twitter を利用しています
ttps://twitter.com/#!/functional2ch
のフォロワーにいるから、まず間違い無く見ているね。
0521デフォルトの名無しさん
2012/05/31(木) 13:23:38.99本の方は省略して書いていて、
タプルのリストと書くほうが正しいということかな?
本ではただのタプルだけど。
0522デフォルトの名無しさん
2012/05/31(木) 13:29:04.340523デフォルトの名無しさん
2012/05/31(木) 13:34:06.190524デフォルトの名無しさん
2012/05/31(木) 13:40:39.78そういうことになりますかね。
紙の本の原文で見ると
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)].
ってな調子なので原文でも「ベクトル...」で始めた文脈のスコープがベクトルに維持されている
事を前提とした説明ですね。
0525デフォルトの名無しさん
2012/05/31(木) 15:26:18.200526デフォルトの名無しさん
2012/05/31(木) 15:53:45.080527デフォルトの名無しさん
2012/05/31(木) 15:59:29.72相手にするな
0528デフォルトの名無しさん
2012/05/31(木) 16:16:11.400529デフォルトの名無しさん
2012/05/31(木) 16:27:13.25>>なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
感情丸出しで書き込んでいて、自分が一番食物連鎖の最下層にいるって気付かないのかな?
0530デフォルトの名無しさん
2012/05/31(木) 17:30:12.27Haskell以外の言語や他ジャンルのスレに無差別に投稿してるみたい。
0531デフォルトの名無しさん
2012/05/31(木) 17:54:01.83だったらHaskell初心者質問スレ立てろって日頃言ってるだろ
立てないなら黙って初心者の斜め上の発言の諫め役に甘んじてろや
0532デフォルトの名無しさん
2012/05/31(木) 18:57:17.51初心者スレなんていらんよ
0533デフォルトの名無しさん
2012/05/31(木) 19:00:45.29相手をしてくれるところに来るんだよな
0534デフォルトの名無しさん
2012/05/31(木) 19:07:41.09>>501,502が読解力の問題というのなら、
お前は本を買っていない貧乏人だろ。
本文を読めばおかしいと分かる。
0535デフォルトの名無しさん
2012/05/31(木) 19:22:06.41ていうか・・・
自分の読解力は問題ない、きっと相手が本を買っていないに違いないって
すごい考え方をする人がいるんだな
0536デフォルトの名無しさん
2012/05/31(木) 19:25:42.58何かにつけて相手を貶さないと死んでしまう病気でも持ってるのだろうか
0537デフォルトの名無しさん
2012/05/31(木) 19:38:40.60それより前の文章を含めて読むと別におかしくないとわかるよ
>>524が文脈のスコープって言ってるのはそういうこと
0538デフォルトの名無しさん
2012/05/31(木) 19:59:54.59と言ったのを、スコープ無視して
だから結果を平等にしろと言い出す頓珍漢が定期的に生まれるらしい
0539デフォルトの名無しさん
2012/05/31(木) 20:02:11.380540デフォルトの名無しさん
2012/05/31(木) 20:02:57.160541デフォルトの名無しさん
2012/06/01(金) 10:01:04.38日教組の悪口はそこまで。
0542デフォルトの名無しさん
2012/06/01(金) 10:22:22.350543デフォルトの名無しさん
2012/06/01(金) 10:50:20.80あんなパラノイアがここにもいると思うとゾッとするからな。
0544デフォルトの名無しさん
2012/06/01(金) 17:51:34.23該当箇所を引用してくれない?
0545デフォルトの名無しさん
2012/06/01(金) 17:55:46.340546デフォルトの名無しさん
2012/06/01(金) 18:04:30.790547デフォルトの名無しさん
2012/06/01(金) 19:21:51.64基礎的なことから学びたいのですが、どこから手を付けるのが良いでしょうか。
メモリ関係、特にガベージコレクタとの関係を主軸にして学びたいです。
"遅延評価" や "Haskell" "実装方法" "メモリ"
などの辺りのキーワードを色々組み合わせてググってみましたが、
学べそうなページは見つかりませんでした。
(他言語で遅延評価をエミュレートする方法は沢山ありました)
マイナーで1万超えるよな値が付いている洋書でも構いませんが、
なにか参考になりそうな資料はないでしょうか。
0548デフォルトの名無しさん
2012/06/01(金) 20:11:52.60普通に読んで分かること。読解力なんて言い出すまでも無いレベルだよ
0549デフォルトの名無しさん
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だけを独立して書いたものが多い。絡めて学ぶのはおすすめではない。
0550デフォルトの名無しさん
2012/06/01(金) 20:50:49.50原文を読むのに必要な読解力と変わらない程度に訳されてると思うのですが。
0551デフォルトの名無しさん
2012/06/01(金) 21:02:13.190552デフォルトの名無しさん
2012/06/02(土) 00:06:58.73ガベージコレクションならこれ
徹底解剖「G1GC」 アルゴリズム編 - 達人出版会
ttp://tatsu-zine.com/books/g1gc
0553デフォルトの名無しさん
2012/06/02(土) 00:08:28.860554デフォルトの名無しさん
2012/06/02(土) 00:15:49.030555デフォルトの名無しさん
2012/06/02(土) 00:40:22.16このうちどれが間違いで、どれが勘違い?
0556デフォルトの名無しさん
2012/06/02(土) 08:36:20.410557デフォルトの名無しさん
2012/06/02(土) 08:47:27.61Prelude> zip [1..] ["りんご","みかん"]
[(1,"\12426\12435\12372"),(2,"\12415\12363\12435")]
ターミナル、LANGともにUTF-8。utf8-stringも入れて見ましたが変わりませんでした。
Mac Lion & ghc 7.0.3
0558デフォルトの名無しさん
2012/06/02(土) 10:14:51.22ネットで全文(英語)読めるしな。そういう意味では要らない。
0559デフォルトの名無しさん
2012/06/02(土) 10:21:22.33訳が気になるだろうしね。
0560デフォルトの名無しさん
2012/06/02(土) 10:53:30.66自己解決しちゃうだろうし悩む事もないって
0561デフォルトの名無しさん
2012/06/02(土) 11:39:40.830562デフォルトの名無しさん
2012/06/02(土) 11:42:25.55目標もちゃんと定まってて欲しているのなら、あとは勉強するだけだろ
なんでしんないの?
0563デフォルトの名無しさん
2012/06/02(土) 11:49:56.390564デフォルトの名無しさん
2012/06/02(土) 11:52:49.19ちょっと日本語忘りかけてるから
0565デフォルトの名無しさん
2012/06/02(土) 12:04:21.25http://twitpic.com/9j2u1m
> 「トムはこれからカムバックというところを、交通事故で亡くなってしまった。」
0566デフォルトの名無しさん
2012/06/02(土) 12:05:46.42→ 懇切丁寧な説明が返ってくる
→ 読解するのがやっとで返事が出せず焦ってわけわかな英語を吐く
→ なにかまずいことを言ったらしくフレームウォー開始
→ ログオフして枕を濡らす
→ 数日後、自分の痴態がIRCログとしてWebで公開されていることを知り鬱になる
一部フィクション
0567デフォルトの名無しさん
2012/06/02(土) 12:17:29.81「英語読める人は出来の悪い邦訳書なんか読まずに原文当たれば良い」
というのがこの問題の正しい解決方法とは思えない。
折角Haskellに興味を持ってくれたCS入門者の悪書によって出端を挫かれ、
他の言語へ移ってしまうことこそ大きな損失だと考えなくてはならない。
0568デフォルトの名無しさん
2012/06/02(土) 12:21:50.780569558
2012/06/02(土) 12:49:04.42ぼかぁ翻訳の出来が悪いとは言ってないんだけどな。
英語全文がネットでタダで公開されてるんだから英語をスラスラ読める様な人には
要らないという普通に当たり前の事を書いただけだ。
自分はまだ11章ぐらいまでしか読んでないけど訳の質が悪いとは思わなかったなぁ。
7章ぐらいからは内容の難易度も少しずつ上がってるのでペースダウンしてる。
0570デフォルトの名無しさん
2012/06/02(土) 12:55:08.15別に何も悪くないよ。ghciの仕様。
(ghciは出力にshowを使うからshowの仕様でもある)
0571デフォルトの名無しさん
2012/06/02(土) 12:58:56.57多分質問者は対処方法を尋ねているのだと思われる
僕も知らないので教えてにゃん
0572デフォルトの名無しさん
2012/06/02(土) 13:04:40.35エスケープされるのが嫌ならshowを使わなきゃいい。
自分で format :: [(Integer, String)] -> String
みたいなのを書いて、putStrLn $ format $ zip [1..] ["りんご","みかん"]
するとか。
いちいちそんなことするのが馬鹿らしいと思うなら、showの仕様を変えるように提案するしかないね…
0573デフォルトの名無しさん
2012/06/02(土) 13:12:53.72ありがとう!
0574デフォルトの名無しさん
2012/06/02(土) 13:17:06.20あえー。そんなに翻訳ひどくなってますかね… > 某スレ
0575デフォルトの名無しさん
2012/06/02(土) 13:19:50.70バランスが悪いな、全体真面目な文章なのに、突然ギャグが入ってくるところとか。
最高クラスの翻訳は日本人が書いたのと全く見分けがつかないけど。
これはところどころ、英文臭が漂うね。
0576デフォルトの名無しさん
2012/06/02(土) 13:23:06.25それは問題ないと思う。
0577デフォルトの名無しさん
2012/06/02(土) 13:25:10.70日本の製本技術の素晴らしさを知らないとは…
0578デフォルトの名無しさん
2012/06/02(土) 13:29:33.39普通の翻訳だよねって話。
もうちょっというと、本は素晴らしいただ訳者のレベルがまぁ○○だよね。
0579デフォルトの名無しさん
2012/06/02(土) 13:31:07.000580デフォルトの名無しさん
2012/06/02(土) 13:40:45.280581デフォルトの名無しさん
2012/06/02(土) 13:40:51.82突然ギャグが入るのは原文もそうだし、ナンセンスギャグなんかもあって
完全にニュアンスを伝える翻訳は難しいだろうな。
関数を評価してる間に犬が誘拐されて家に火が付けられるとか日本語で言われると
このナンセンスさのノリが伝わりにくい。
0582デフォルトの名無しさん
2012/06/02(土) 13:49:28.57それ、ギリシア神話で似たようなのなかったっけ?
0583デフォルトの名無しさん
2012/06/02(土) 13:50:48.46イソップ物語
0584デフォルトの名無しさん
2012/06/02(土) 13:52:44.53直訳がまずいところを具体的に示すことなく
訳者のレベルを否定的な表現を交じえて伏せ字で示すあたり燃料以外になにがあるのかと
0585デフォルトの名無しさん
2012/06/02(土) 13:54:25.860586デフォルトの名無しさん
2012/06/02(土) 13:54:32.87ttp://blog-imgs-42.fc2.com/k/i/r/kira47/20120410171046c16.jpg
0587デフォルトの名無しさん
2012/06/02(土) 13:56:41.62ttp://30.media.tumblr.com/tumblr_l658t8RQIh1qz7zoso1_500.gif
0588デフォルトの名無しさん
2012/06/02(土) 13:56:49.19全部挙げろとは言わないが例示ぐらいあってもいいんじゃない
0589デフォルトの名無しさん
2012/06/02(土) 14:03:20.91読む人のレベルがバラバラなんだから学生同士が話しているのとはわけが違うぞ。
それなのに例示をしめした所で単にこじれるだけだっつーの。
0590デフォルトの名無しさん
2012/06/02(土) 14:05:37.100591デフォルトの名無しさん
2012/06/02(土) 14:10:43.81著者のレベルも読む人のレベルによって左右されるものだよね
それを伏せ字を交じえて断じた時点でこじれるには十分だしこうして実際にこじれてる
0592デフォルトの名無しさん
2012/06/02(土) 14:31:32.850593デフォルトの名無しさん
2012/06/02(土) 15:29:52.310594デフォルトの名無しさん
2012/06/02(土) 16:17:24.06>>578
0595デフォルトの名無しさん
2012/06/02(土) 16:25:46.66アホなのか?
訳者のレベルがまずいってんなら訳文で示せって言ってんだけど。
さっきからテメー苦し紛れに雑魚いレスつけやがってうざいんだよ
0596デフォルトの名無しさん
2012/06/02(土) 16:33:57.60┏━━━━━━┓
┃ Λ_Λ ┃
┃ ( ;@Д@) ┃
∧_∧ (m9 つ ┃
( )人 Y ┃
( O つ (_) ┃
`ノ イ━━━━━┛
し-"(_)
0597デフォルトの名無しさん
2012/06/02(土) 16:35:26.860598デフォルトの名無しさん
2012/06/02(土) 16:38:11.100599デフォルトの名無しさん
2012/06/02(土) 17:39:24.510600デフォルトの名無しさん
2012/06/02(土) 18:36:04.29でも全体としてはよく訳せてると思うよ…
0601デフォルトの名無しさん
2012/06/02(土) 18:54:21.55粘着さんが一番怖い。パール忍者が10人いるような状態が一番まずい。
0602デフォルトの名無しさん
2012/06/02(土) 19:22:15.27>>595
のようにまずいってどこがだとか
なかった問題をさもあるように作り上げて楽しむ愉快犯がいるからなぁ。
0603デフォルトの名無しさん
2012/06/02(土) 20:24:26.29和訳に使う日本語に慣れてしまうよね
無生物主語を日本語でも普通に使うようになったり
0604デフォルトの名無しさん
2012/06/02(土) 21:09:51.24無生物主語は立派なひとつの文体。つ村上春樹
0606デフォルトの名無しさん
2012/06/02(土) 22:08:05.30それくらい質が高い、と思う。
エキスパートプログラミングに匹敵するんじゃない?
0607デフォルトの名無しさん
2012/06/02(土) 22:49:31.03Altキーを押しても普通のWindowsアプリケーションのようにメニューにフォーカスが移動しません。
フォーカスをメニューに移動させるキーって用意されていないのでしょうか?
0608デフォルトの名無しさん
2012/06/03(日) 00:04:05.61訳が上質であれば私はそれでいいです
0609デフォルトの名無しさん
2012/06/03(日) 00:20:13.68それはある。俺の文章は既にその傾向にあるし、2ちゃんで翻訳文章みたいと
言われたことがあった。
0610デフォルトの名無しさん
2012/06/03(日) 00:30:56.980611デフォルトの名無しさん
2012/06/03(日) 00:48:46.14いくらか度を越した英語学習は私が和訳に用いる日本語の語彙にも影響を及ぼしていた
0612デフォルトの名無しさん
2012/06/03(日) 04:10:47.880613デフォルトの名無しさん
2012/06/03(日) 07:02:53.460614デフォルトの名無しさん
2012/06/03(日) 10:17:36.62> >>525
> >>なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
> 感情丸出しで書き込んでいて、自分が一番食物連鎖の最下層にいるって気付かないのかな?
俺食われちゃうのかな?
0615デフォルトの名無しさん
2012/06/03(日) 11:41:42.15他の人も問題にしています。
http://code.google.com/p/leksah/issues/detail?id=119
例えばこの人は [Alt + F] が効かないと言っていますが、
本質的に貴方と同じ問題を提起しています。
ただ、この人の問題提起は2009年9月で、
その現象の再現が確認できたのでどうにかしたいと、
プロジェクトメンバーが返事していますね。
にもかかわらず、未だに直っていないのなら、直す気がないのでしょう。
0616デフォルトの名無しさん
2012/06/03(日) 22:01:01.170617デフォルトの名無しさん
2012/06/03(日) 23:14:58.91訳者のレベル云々言っておきながら「訳に問題があるなんて誰が言った」という論理はよく分からんが、
まぁなんか一言言いたかったんだろう。あまり蒸し返さない方がいい。
0618デフォルトの名無しさん
2012/06/03(日) 23:18:38.10他人のレベルが低い…俺のレベルは高い…俺輝いてるッ 気持イイッ
0619デフォルトの名無しさん
2012/06/04(月) 00:16:04.930620デフォルトの名無しさん
2012/06/04(月) 00:17:22.83お買い上げありがとうございます。
0621デフォルトの名無しさん
2012/06/04(月) 06:34:45.230622デフォルトの名無しさん
2012/06/04(月) 07:17:43.180623デフォルトの名無しさん
2012/06/04(月) 08:15:42.960624デフォルトの名無しさん
2012/06/04(月) 08:49:18.45誰がどう見ても厨房。>>623 はさらにそれ以下の消防。
0625デフォルトの名無しさん
2012/06/04(月) 09:20:11.41ネットで調べてみたら胡散臭いやつだったしな
0626デフォルトの名無しさん
2012/06/04(月) 09:21:26.820627デフォルトの名無しさん
2012/06/04(月) 09:35:52.410628デフォルトの名無しさん
2012/06/04(月) 11:19:01.24/__/ ‘,
// ヽ ', 、
// ‘ ! ヽ …わかった この話はやめよう
/イ ', 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 {::::::::::::::Υ /
0629デフォルトの名無しさん
2012/06/04(月) 11:37:58.59p.57
O(NlogN)で抑えるなんて言い方は無い。上に抑えられていることをO(NlogN)程度と言う。
訳者はOの定義もΩやΘとの違いも知らないんだろうな。
所要時間の期待値の件も変。普通は所要時間の期待値と言ったら全ての可能な入力に対する期待値の事だが、この意味ではピボットをどう選ぼうが(選択に定数時間しかかけない限り)クイックソートの計算量の期待値はO(NlogN)だ。
ある特定の入力に対する確率的アルゴリズムの計算量の期待値のことを言いたいんだろうが、本文中には決定的アルゴリズムの話しか出て来てないのにいきなりそっちを持ち出すのは変。
p.150
正格評価でも、yesResultとnoResultの両方を評価するなら実装は遅延評価とほとんど変わらないので、この訳注は完全に嘘。片方しか評価したくない場合なら遅延評価の方が手軽に実装できるのは分かるが、二文目で自分で否定してる。
0630デフォルトの名無しさん
2012/06/04(月) 12:04:49.79Haskell Platform 2012.2.0.0
http://hackage.haskell.org/platform/
真っ赤かだな
0631デフォルトの名無しさん
2012/06/04(月) 12:38:14.93p.57脚注は慣用的にアリだという気もしなくはないけど、確かに厳密な言葉を使わないかんね
p.150脚注は「二文目で否定して」はいないと思うのだがどうか。
で、多くて萎えた、という割には2つしかない(というか実質1つ?)なん?
0632デフォルトの名無しさん
2012/06/04(月) 12:42:05.03> p.160訳注: yesnoIfがこのように手軽に実装できたのは、
Haskellが遅延評価を基本とする言語だからこそ です。一方、
正格評価では、 yesnoIf を呼び出す前に、 yesResult と noResult
の両方を評価し終える必要があります!
違和感ないけどなぁ。まあ私なら「必要があります」というより、「yesnoIfの前に両方が評価されてしまいます」と書くかも
0633デフォルトの名無しさん
2012/06/04(月) 13:06:13.22それだと実装の手軽さは変わらないから、第一文も直さないとだめだな
p.160脚注は「正格評価だと事前に両方評価しないといけないから実装が面倒!」と読めるし、
嘘もしくは酷いミスリーディングと言われても仕方ない
0634デフォルトの名無しさん
2012/06/04(月) 15:56:19.49門外漢でも分かるところに噛み付いてるのがミエミエで微笑ましいw
>>633
お前、正格評価でyesnoIf実装してみろよ
まあ100%逃げるだろうけど
0635デフォルトの名無しさん
2012/06/04(月) 16:34:49.17かと言って「手軽に実装できる」じゃ曖昧すぎる気もするが。
せいぜい「yesnoIfが通常の関数と同じように記述できるのは、
Haskellでは引数の評価に遅延評価を採用しているからです」と注意を促すくらいがいいところか。
訳本は持ってないが、元のテキストでは評価器の話はほとんどなくて、
lazinessに対する直感的な理解に留まってたんじゃないかな。
0636デフォルトの名無しさん
2012/06/04(月) 16:35:54.20>>632の前提なら、遅延評価版と一字一句変わらないな
話の流れ読めてる?
0637デフォルトの名無しさん
2012/06/04(月) 16:36:52.630638デフォルトの名無しさん
2012/06/04(月) 16:41:35.03本文でもlazinessには触れてない。
ここで遅延評価の訳注は本文の趣旨からいくとややミスリード気味だと思われる。
盛り込みたくなる気持ちはわかるが。
0639デフォルトの名無しさん
2012/06/04(月) 16:46:50.87訳注でいきなりマズいこと前提にしてるのもおかしな話
0640デフォルトの名無しさん
2012/06/04(月) 18:33:18.04目玉は?
0641547
2012/06/04(月) 19:10:50.82分りにくい質問ですいませんでした。
歴史というのは、Haskell の遅延評価の実装が
初期に比べてどんどん効率的になってきた発展の歴史のことでした。
と言うのも、私は正直なところ既にかなり洗練されたものの仕組みを調べても、
なかなか頭に入らない類の人間なもので、原始的なところから
少しずつ調べていこうと思った次第です。
まずは教えていただいた資料を読み、さらに参考資料を辿って学んでみたいと思います。
GC と遅延評価は密接に絡んでいると思ったのですが、そうでもないのですね。
それでしたら、とりあえず GC は後回しにします。
>>552
ということで、興味自体はあるのですが、またの機会に読んでみようと思います。
お二人とも、ありがとうございました。
0642デフォルトの名無しさん
2012/06/04(月) 19:49:51.35Thunkの回収を明示的にやるのは難しいから。
けどGCの研究がずっと先行してる。
独立に勉強して。
それからHaskellの処理系開発で遅延評価が劇的に向上したことはない。
むしろライブラリ実装の方で起きてる。
0643デフォルトの名無しさん
2012/06/04(月) 20:00:36.96SimonさんのImplementing functional languages: a tutorialあたりをとっかかりに。
0644デフォルトの名無しさん
2012/06/04(月) 20:36:06.66と筆者は、同氏によるヘルマン・ヘッセ著『知と愛』の翻訳について話し合った
ことがある。モリナーロ氏はほぼ1年にわたり、その本のドイツ語版を抱えて
自宅と作業場となっていたカフェを行き来した。
あるとき、好奇心を抑えきれなくなったクリーニング店の店主がついに、
同氏が分厚い本を抱えている理由を聞いた。「翻訳しているんです」と
モリナーロ氏が説明すると、驚いて目を見開いた店主が聞き返した。
「一語残らずですか」
(略)
筆者の友人のクリーニング屋が想像したように、一語一語を厳密に訳し
ていく翻訳など存在しない。うまい翻訳をするには、奇術師でもあるべき
だろう。本文の一部を手品師の鳩のように跡形もなく消し、
自らの感覚で部分的に手直しして全く違う場所に復活させる。
これはすべての生き生きとした魅力あふれる翻訳の決まりの悪い事実である。
本文が描写していることが自分たちの文化では非現実的に思えるとき、
翻訳者たちはときに自らの見解を差し挟む。たとえば、パリの住人が平日に
3時間かけて取る昼食を退屈で日常的なこととして描かなければならない
という現実に直面することがある。そんなときはどうするか。
とにかくそのまま進み、読者の大半がフランスの文化に十分精通していて、
そのきわめて日常的なことをひどく非現実的とは思わないことを願うばかり
である。
文化的な違いが最も露骨に表れるのは、翻訳の破たんとも考えられている
言語学的難題、だじゃれである。
(略)
http://jp.wsj.com/Life-Style/node_451636
0645547
2012/06/04(月) 20:48:07.98わかりました。
同時にはできないので、まずは遅延評価の根幹から学びます。
> それからHaskellの処理系開発で遅延評価が劇的に向上したことはない。
これから学ぼうとする私にとっては大変有難い事実です。
0646デフォルトの名無しさん
2012/06/04(月) 21:27:15.02いやいや、流れで言えばこの訳注はわりと適切な位置にあるし、第一文も完全に正しいでしょ
この遅延評価の話が出てくるのは7章も後半で、Haskellの多くの部分が説明された後だ。
「正格評価」という言葉こそないが、正格さについては遅延評価とあわせてpp.80-100あたりでfoldl'の話と一緒に長い議論があるし、
そんな一部分だけ取り出してミスリーディングとか騒がれてもナァ
0647デフォルトの名無しさん
2012/06/04(月) 21:28:53.200648デフォルトの名無しさん
2012/06/04(月) 21:37:07.50>第一文も完全に正しいでしょ
何の根拠も書かずに主張されてもな
じゃあ「遅延評価を基本とする言語だから」yesnoIfが「手軽に実装できる」ことを実例付きで説明してくれ
>>647
もう一回聞くが、話の流れ読めてる?
0649デフォルトの名無しさん
2012/06/04(月) 21:53:41.23647はなにが言いたいのかさっぱり分からん
0650デフォルトの名無しさん
2012/06/04(月) 22:22:36.54副作用が絡まなくて意味がある例なら、たとえばこんなのとか。
sinc x = yesnoIf (x == 0) 1.0 (sin x / x)
正格評価だとクロージャにつつまなければいけないから、
yesnoIfの定義も呼び出し側もちょっとめんどくさくなる。
0651デフォルトの名無しさん
2012/06/04(月) 22:27:21.62yesResult /= ⊥ → yesno p = True → yesnoIf (yesno p) yesResult ⊥ /= ⊥
を使って説明するのが簡単なのだけど、あの本は等式推論について触れてないから
正直lispでifをdefunを使って実装した場合とdefmacroを使って実装した場合の違いを説明するよう泥臭い説明しかできないだろうな
原著でも⊥になる値を突っ込んだものを例に含めてないのはこの辺の厄介を回避する為なのだろうかと思ってしまう
0652デフォルトの名無しさん
2012/06/04(月) 22:33:27.08「はじめに」から順に読めばまあ多分普通にわかること
0653デフォルトの名無しさん
2012/06/04(月) 22:40:32.12だからそれは「yesnoIfの前に両方が評価されて欲しくない」という前提の場合だろ
yesnoIfの要件が本文中に全く書かれていないのに、
訳注で勝手にそんな前提を置いているのはおかしい、というのが今の話なんだが
むしろ脚注の第二文を見ると、「正格評価のyesnoIfではyesnoIfの前に両方が評価される」と読める
これは>>650で言っていること(そしておそらく脚注の第一文で言いたいこと)と真逆だ
0654デフォルトの名無しさん
2012/06/04(月) 22:44:16.380655デフォルトの名無しさん
2012/06/04(月) 22:48:13.670656デフォルトの名無しさん
2012/06/04(月) 22:51:24.19だって、クロージャに包んでyesResultとnoResultが先に評価されないようにする/できるんでしょ?
0657デフォルトの名無しさん
2012/06/04(月) 22:54:37.590658デフォルトの名無しさん
2012/06/04(月) 23:04:41.57逆に正格評価のものを実装するなら正格評価を基本とする言語の方が手軽に実装できるだろう
それをまるで遅延評価の利点であるかのように書いてるp.160(p.150?)訳注はミスリーディングだと思うな
0659デフォルトの名無しさん
2012/06/04(月) 23:11:21.77ifは(thenとelseについて)非正格というならまだしも
0660デフォルトの名無しさん
2012/06/04(月) 23:13:56.48思うに脚注一文目で言いたいことはまさにそれ。
正格評価だと、引数を先に評価しないようにするためにクロージャやマクロ等を使わなければならないのがめんどくさいということ。
脚注二文目で言いたいことは多分、正格評価は引数を先に評価するという意味と思ってよいから、めんどくさくなるのは正格評価である以上仕方ないということ。
たしかに簡約だとか式の変換とかなしでのこの訳注は、Haskell初心者にとっては意味不明な気もする。
0661デフォルトの名無しさん
2012/06/04(月) 23:27:51.68話がつながらない。筆が滑ったんでしょ。
しかし、こんな全体としてこんなに出来のいい訳本に文句つけるなんて、Haskellerは贅沢すぎる。
「プログラミングの壺」の訳本をみせてやりたい。
0662デフォルトの名無しさん
2012/06/04(月) 23:40:58.96俺はこの議論には参加せずずっとROMってたんだが、
文句つけてくれたお陰で見識を得た
むしろ、ありがとうと言いたい
0663デフォルトの名無しさん
2012/06/04(月) 23:54:20.59しつこく聞いてくるから例を挙げただけだよ。全部書くのは面倒なので勘弁。
0664デフォルトの名無しさん
2012/06/04(月) 23:55:40.460665デフォルトの名無しさん
2012/06/04(月) 23:58:38.39なんでもそうだけど、声のデカいアホをコミュニティの代表扱いするのは辞めてほしい
0666662
2012/06/05(火) 00:01:11.27いや、俺は「文句つけるなんて、Haskellerは贅沢すぎる」に対して、
そう悪い面ばかりでもないよという意味で言ったまでだ
他のHaskellerには迷惑かもしれんし、そもそも訳の質についてはスレチだから、
ほどほどにしておいた方が良いと思うよ
0667デフォルトの名無しさん
2012/06/05(火) 00:06:59.510668デフォルトの名無しさん
2012/06/05(火) 00:07:43.420669デフォルトの名無しさん
2012/06/05(火) 00:15:16.320670デフォルトの名無しさん
2012/06/05(火) 01:57:46.05> 正格さについては遅延評価とあわせてpp.80-100あたりでfoldl'の話と一緒に長い議論があるし、
Data.Listの紹介でfoldl'ってstricterなバージョンがありますって紹介してるだけじゃないの?
0671デフォルトの名無しさん
2012/06/07(木) 08:26:06.90落とし穴がこうで云々詳しく扱ったサイトありませんか?
0672デフォルトの名無しさん
2012/06/07(木) 12:43:25.09正格評価なのか非正格評価なのかって、
シグネチャ見るだけじゃ分らないんだよね。
ライブラリユーザーにこれを伝えるには、
関数名で分るようにしておくか、
ドキュメントに注意書きするくらいしか方法はないの?
0673デフォルトの名無しさん
2012/06/07(木) 14:48:32.13翻訳の技量は普通だけど
Haskellの技術者としては指導できるレベルじゃないってことでしょ。
平たくいえば、外国でHaskellの天才が書いた本を
自分もそのおこぼれを与ろうと低レベル者が翻訳してみせたのがこのすごいH本。
翻訳者もHaskellの天才だったら良かったのに、
単に金儲けがしたい、英語力はそこそこだが、
Haskellはちょっとかじった程度のやつに目をつけられて
金儲けの道具にされてしまった。
原作者は散々だったな、可哀想だって思ったのが
この騒動の発端だろう。
0674デフォルトの名無しさん
2012/06/07(木) 15:08:07.89| `*。
,。∩ * もなど
+ (´・ω・`) *。+゚
`*。 ヽ、 つ *゚*
`・+。*・' ゚⊃ +゚
☆ ∪~ 。*゚
`・+。*・ ゚
0675デフォルトの名無しさん
2012/06/07(木) 15:12:08.660676デフォルトの名無しさん
2012/06/07(木) 15:52:45.14中学3年、高校3年、大学4年英語勉強して
英語喋れない奴は腐るほどいるぞw
0677デフォルトの名無しさん
2012/06/07(木) 16:00:05.43同様にHaskellもそれで食ってるぐらいじゃないと実用性を啓蒙できる立場では無いとか
本や講演で儲けるだけの段階ではマルチとかあやしいビジネスセミナーとか宗教とかと同レベルだと
確かに近年の○○勉強会みたいな類はそういう妙な空気があるように思える
0678デフォルトの名無しさん
2012/06/07(木) 16:29:01.300679デフォルトの名無しさん
2012/06/07(木) 16:35:30.25なんかしんないけど言いがかりみたいないちゃもんつけて翻訳の悪口
を言って盛り上がるスレですよね?
正直「すごいハスケル」って本は買ってないし読んでないし読むつもりもないんですが
翻訳の質にガンガン文句言って盛り上げていきますんでヨロシク! (^з^)-☆
0680デフォルトの名無しさん
2012/06/07(木) 16:56:11.290681デフォルトの名無しさん
2012/06/07(木) 17:09:29.22十分意味が通じるけど?
0682デフォルトの名無しさん
2012/06/07(木) 17:11:21.360683デフォルトの名無しさん
2012/06/07(木) 17:13:22.442chならそれで十分だろ。
0684デフォルトの名無しさん
2012/06/07(木) 17:46:11.31どこの学士様ですか?
0685デフォルトの名無しさん
2012/06/07(木) 18:34:20.520686デフォルトの名無しさん
2012/06/07(木) 19:23:26.40そんな英語力で偉そうに文句言って恥ずかしくないんかな?
0687デフォルトの名無しさん
2012/06/07(木) 19:31:38.77恥ずかしいとか、そんなのどうでもいい
良くない部分、おかしい部分、曖昧な部分は
気づいた者が躊躇なく指摘すべき
恥ずかしがる理由なんて微塵もない
0688デフォルトの名無しさん
2012/06/07(木) 19:37:39.12http://www.bigbasstabs.com/
俺タンバリンな
0689デフォルトの名無しさん
2012/06/07(木) 20:05:27.720690デフォルトの名無しさん
2012/06/07(木) 20:10:11.96はじめてのCをお返しとけ
0691デフォルトの名無しさん
2012/06/07(木) 20:40:40.78> 「すごいC楽しく学ぼう」という保健体育本はまだですか
0692デフォルトの名無しさん
2012/06/07(木) 20:50:35.36ム板てネタに対してちょっとしつこいな
0693デフォルトの名無しさん
2012/06/07(木) 21:58:42.33コンピュータは適当にこなしといてくれないし。
0694デフォルトの名無しさん
2012/06/07(木) 22:28:40.230695デフォルトの名無しさん
2012/06/07(木) 22:30:46.90…さすがHaskellスレ
0696デフォルトの名無しさん
2012/06/08(金) 07:39:22.11説得力ないし、もっとHaskellの内容で勝負しようぜ
0697デフォルトの名無しさん
2012/06/08(金) 07:41:28.680698デフォルトの名無しさん
2012/06/08(金) 08:13:12.11>>646, 647, 652辺りで一人頓珍漢な指摘してた人?
0699デフォルトの名無しさん
2012/06/08(金) 08:45:52.890700デフォルトの名無しさん
2012/06/08(金) 09:41:25.540701デフォルトの名無しさん
2012/06/08(金) 10:15:30.48突っ込まれてる内容を見る限り、
Haskellの技術者としては、と言うよりエンジニアとしては、だな
0702デフォルトの名無しさん
2012/06/08(金) 13:58:27.24さすがHaskellerやで。
0703デフォルトの名無しさん
2012/06/08(金) 14:56:27.48チュートリアルなんだから、沢山の人に読まれるのがよい。
誤訳等の指摘があるのいいこと。度を越さない限り。
チュートリアルなんだから、よりよい訳になれば、なおいい。
叩きすぎるのも、容認しすぎるのも思考停止に陥りやすい。
0704デフォルトの名無しさん
2012/06/08(金) 16:46:43.040705デフォルトの名無しさん
2012/06/08(金) 16:52:46.550706デフォルトの名無しさん
2012/06/08(金) 19:47:00.73reactive-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 も自身のブログも全然更新しないんだけど、
ひょっとしてもう死んだ? まだ生きてるよね
0707デフォルトの名無しさん
2012/06/08(金) 21:59:17.26くらいの意味じゃないかなぁ。学生の講義で使ったとか?まったくの憶測だけど
RussellOConnorのサイトを探したら http://r6.ca/code.html にあったけど、
特にこのパッケージについて言及ないっぽい
0708デフォルトの名無しさん
2012/06/08(金) 22:39:37.86どこを見ればいいでしょうか?
0709デフォルトの名無しさん
2012/06/08(金) 23:13:24.34どこで出てくるstなのか書いてもらえないと答えようがないよー
0710デフォルトの名無しさん
2012/06/08(金) 23:25:43.90↓ みたいな感じで関数の型に出てくる st です
GenParser Char st [String]
0711デフォルトの名無しさん
2012/06/08(金) 23:29:23.43parsecがstate monadなのは理解できてるの?
0712デフォルトの名無しさん
2012/06/08(金) 23:34:29.64そもそもParsecってStateMonadなの?
0713デフォルトの名無しさん
2012/06/08(金) 23:36:06.48さておき、
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のマニュアルを読むのがいいと思うけどとりあえず
0714デフォルトの名無しさん
2012/06/08(金) 23:37:33.72あるいはErrorTとStateを組み合わせて同じものを作ってみるのも良いかも
0715デフォルトの名無しさん
2012/06/08(金) 23:41:09.720716デフォルトの名無しさん
2012/06/08(金) 23:43:06.830717デフォルトの名無しさん
2012/06/08(金) 23:47:17.970718デフォルトの名無しさん
2012/06/09(土) 01:19:41.25パーサのstの部分って、パーサを作ってる段階じゃ何が入るか分からないの?
0719デフォルトの名無しさん
2012/06/09(土) 13:48:13.74f :: GenParser tok st ()
という関数があったら、st の部分に何が入っても f を使える、ということ(多相性)
逆にいえば、 f 自身は、 st に何が入ってるか知らない(中身を触れない)
0720デフォルトの名無しさん
2012/06/09(土) 14:02:28.81パーサがパースしてる最中に f を何度もいろんな使い方するってことか
0721デフォルトの名無しさん
2012/06/09(土) 15:44:48.67ずっと手を付けなかった自分を殴りたい
0722デフォルトの名無しさん
2012/06/09(土) 16:30:44.77一つのパーサーの実行途中でstの型が変わることはない。
1+1+1 という式が → 2+1 → 3 と計算される途中でString型に変わったりしないのと同じ
0723デフォルトの名無しさん
2012/06/09(土) 19:32:42.81これもreactive-bananaの単なる追加パッケージかと思いきやreactive-bananaに依存しないまったく別の実装だったりする
0724デフォルトの名無しさん
2012/06/09(土) 20:14:18.180725デフォルトの名無しさん
2012/06/09(土) 20:21:25.86じゃなくて
ばなな
0726デフォルトの名無しさん
2012/06/09(土) 20:22:18.090727デフォルトの名無しさん
2012/06/09(土) 20:43:29.820728デフォルトの名無しさん
2012/06/09(土) 21:26:25.15ゲーム作る前に名前から決める奴
0729デフォルトの名無しさん
2012/06/09(土) 21:41:08.790730デフォルトの名無しさん
2012/06/09(土) 22:03:24.180731デフォルトの名無しさん
2012/06/09(土) 22:03:40.310732デフォルトの名無しさん
2012/06/09(土) 22:12:23.17爆弾でもいいから Haskell 関連の話題を投下してくれ
0733デフォルトの名無しさん
2012/06/09(土) 22:33:37.620734デフォルトの名無しさん
2012/06/09(土) 22:39:55.15きみが作者にバグフィクスを送ったら改善される
0735デフォルトの名無しさん
2012/06/09(土) 23:57:31.710736デフォルトの名無しさん
2012/06/10(日) 00:37:05.380737デフォルトの名無しさん
2012/06/10(日) 05:58:46.12きみが作者にバグフィクスを送ったら改善される
0738デフォルトの名無しさん
2012/06/10(日) 10:13:28.940739デフォルトの名無しさん
2012/06/10(日) 13:13:07.990740デフォルトの名無しさん
2012/06/10(日) 15:48:54.30時々こんなメッセージでコンパイラが落ちる
*** Exception: compiler\rename\RnPat.lhs:535:39-79: Irrefutable pattern failed for pattern gres@(gre : _)
まあぐぐってみたら普通に既知みたいだが・・・
0741デフォルトの名無しさん
2012/06/10(日) 16:04:16.670742デフォルトの名無しさん
2012/06/11(月) 20:38:55.48読んでみたら本当に糞訳すぎて噴いたわw
0743デフォルトの名無しさん
2012/06/11(月) 20:39:56.97擁護しているの関係者としか思えん
0744デフォルトの名無しさん
2012/06/11(月) 21:21:11.52サンプルじゃなくてチュートリアルです
0745デフォルトの名無しさん
2012/06/11(月) 21:35:14.31stackoverflowより
http://stackoverflow.com/questions/9210412/recommended-reading-tutorials-to-understand-reactive-banana-frp-library
0746デフォルトの名無しさん
2012/06/12(火) 07:35:26.82ありがとうございます。
なるほど、まだ変動的だからちゃんとしたチュートリアルは作れないのですね。
作者のブログやstackoverflowの記事を参考にてみます。
0747uy
2012/06/12(火) 13:27:06.82じゃなければただのバカだよね
0748デフォルトの名無しさん
2012/06/12(火) 20:41:36.150749デフォルトの名無しさん
2012/06/12(火) 21:16:42.690750デフォルトの名無しさん
2012/06/12(火) 21:18:38.030751デフォルトの名無しさん
2012/06/13(水) 12:41:17.14reactive-banana って、時間の概念は直接表には出てこないんだよね。
同時に発生したイベントの union はどちらが先に起こったことにするかとか、
その程度の間接的な扱いしかできない。
例えば、sin(アプリ開始からのt秒) という値を持つビヘイビアが作りたいなら、
現在時間を値に持つイベントを作り、それを自分のイベントループの中で毎回発火させ、
そのイベントからビヘイビアに変換させるのが普通なのかな。
reactive パッケージの time みたいに、時間のビヘイビアを直接得る方法はないの?
0752デフォルトの名無しさん
2012/06/13(水) 19:43:49.70ないから作るしかない。
IOモナドからBehavior作るfromPollって関数があるからそれ使えばいいと思う。
0753デフォルトの名無しさん
2012/06/13(水) 20:31:56.94やっぱり、そういうことなのね。
FRP と一言で言っても、いろいろな設計思想があって面白いな。
0754デフォルトの名無しさん
2012/06/14(木) 17:47:08.09一日中Haskellでもやってんの?
0755デフォルトの名無しさん
2012/06/14(木) 17:54:59.06むしろHaskell以外の方がやること多くないか。
0756デフォルトの名無しさん
2012/06/14(木) 22:02:09.61アクセスしたのですが繋がりません。ひょっとしてうちだけ?
0757デフォルトの名無しさん
2012/06/14(木) 22:05:48.05投稿見てもサイトダウンとか何も触れてないし……
0758デフォルトの名無しさん
2012/06/14(木) 22:06:37.28ところで入門書は何買ったん?
0759デフォルトの名無しさん
2012/06/14(木) 23:03:05.31ネットワークの設定の影響だと思うが。
http://d.hatena.ne.jp/sirocco/touch/20110905/1315255573
0760デフォルトの名無しさん
2012/06/14(木) 23:19:43.980761756
2012/06/15(金) 00:29:58.76hackage.haskell.orgはDNSは引けてるみたいなんですが(69.30.63.204)
pingが通らないです。traceroute すると10hop目位から先行けないようです。
端末はMac OS X LionでIPv6も有効になっちゃってますがv4アドレス直指定でも
ping/tracerouteが通らないので、ネットワーク側の問題と思われたのですが……
と、これ以上は板違いなので控えます。今度くる時はHaskellの話題で。
0762デフォルトの名無しさん
2012/06/15(金) 00:49:53.850763デフォルトの名無しさん
2012/06/15(金) 00:55:54.910764デフォルトの名無しさん
2012/06/15(金) 07:43:46.13以前、つながらないと言っていた者です。
プライベートアドレスを割り振ってるところではつながらない可能性があるみたい。
ルーターの問題なのかな?(IPv6に対応していない?) 詳しくはわかりません。
自分のマンションも、プライベートアドレスが割り当てられてて、つながらないです。
自分の場合は、適当なプロキシを指せばつながります。
0765デフォルトの名無しさん
2012/06/15(金) 16:10:08.91IPv6を有効にしている/有効になっているクライアントが悪い。
0766デフォルトの名無しさん
2012/06/15(金) 16:49:05.300767デフォルトの名無しさん
2012/06/16(土) 16:11:25.13f :: String -> Maybe Integer のような関数は標準ライブラリにありましたっけ?
0768デフォルトの名無しさん
2012/06/16(土) 16:59:24.760769デフォルトの名無しさん
2012/06/16(土) 19:20:54.000770デフォルトの名無しさん
2012/06/16(土) 19:26:51.24Real World Haskell の次は、実際にプログラムを書くとかソースを読むとかすればいいと思う。
0771デフォルトの名無しさん
2012/06/16(土) 19:27:56.570772デフォルトの名無しさん
2012/06/16(土) 19:43:24.68Maybe ではないけど、指定した型の数値に変換できなければ
空リストが返ってくるってことね
ありがと
0773デフォルトの名無しさん
2012/06/16(土) 19:46:55.650774デフォルトの名無しさん
2012/06/16(土) 20:43:35.03目的は何?
0775デフォルトの名無しさん
2012/06/16(土) 21:37:29.24揺るぎなき基礎力です
0776デフォルトの名無しさん
2012/06/16(土) 22:44:49.44規格書読めば?
0777デフォルトの名無しさん
2012/06/16(土) 23:46:34.01揺るがなくなるまで再帰的にリワハ読んでろ
不動点だ
0778デフォルトの名無しさん
2012/06/17(日) 01:58:40.62ワロタ
0779デフォルトの名無しさん
2012/06/17(日) 16:28:05.35RWHに練習問題や研究課題が載ってるからそれを解いてみればいかがでしょうか
0780デフォルトの名無しさん
2012/06/17(日) 20:01:54.89自分で入れてたライブラリ再ビルド・インストール(´・ω`・)メンドクセ
0781デフォルトの名無しさん
2012/06/17(日) 20:05:54.82ようこそデビアンへ!
0782デフォルトの名無しさん
2012/06/17(日) 21:51:22.260783デフォルトの名無しさん
2012/06/17(日) 22:24:24.580784デフォルトの名無しさん
2012/06/17(日) 22:50:35.17君の環境からは HackageDB のページは見れないのですか?
0785デフォルトの名無しさん
2012/06/17(日) 22:56:47.89○ 見られない
0786デフォルトの名無しさん
2012/06/17(日) 23:03:27.35ご指摘ありがとうございます。
0787デフォルトの名無しさん
2012/06/17(日) 23:04:22.65ネカフェでダウンロードしてきたArchive.tarならあります
0788デフォルトの名無しさん
2012/06/17(日) 23:12:04.96それがどういう状況なのか今ひとつ分りませんが、
要するに君の今の環境では HackageDB にアクセスできないのですね。
それは残念です。
せっかく HackageDB に bloomfilter パッケージがあるのに使えませんね。
0789デフォルトの名無しさん
2012/06/17(日) 23:18:52.020790デフォルトの名無しさん
2012/06/17(日) 23:19:26.92そこに飛んで下の方にあるarchive(238MB)をダウンロードして帰ってきました
ここに全部入ってるわけではないのですか?
0791デフォルトの名無しさん
2012/06/17(日) 23:33:50.72私は >>788 のレスの通り Archive.tar の意味するところが分っていません。
私に分っているのは HackageDB に bloomfilter パッケージがあるという事だけです。
私よりも >>789 の方が詳しそうです。
0792デフォルトの名無しさん
2012/06/17(日) 23:34:17.370793デフォルトの名無しさん
2012/06/17(日) 23:35:16.070794793
2012/06/17(日) 23:55:34.53bloomfilter-1.2.6.8.tarですね
7-ZIPにファイル名検索機能があれば見落とさなかったんですが
0795デフォルトの名無しさん
2012/06/18(月) 07:48:44.230796デフォルトの名無しさん
2012/06/18(月) 12:08:53.250797デフォルトの名無しさん
2012/06/18(月) 12:37:28.05たとえば、現在時刻を値として持つイベントがあって、
トリガーされる毎に前回のイベントとの差分値、つまり経過時間を得るとか。
0798デフォルトの名無しさん
2012/06/18(月) 18:27:10.79勿論この通りにリストで履歴を保持なんてしてたらメモリが溢れちゃうから、適当にリングバッファみたいな仕組みで扱うことになるだろうけど
elereaだとstateful一発なんだけどね
0799798
2012/06/18(月) 18:39:06.10http://hpaste.org/70102
0800デフォルトの名無しさん
2012/06/18(月) 18:56:10.75delay :: 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はいくら初心者向けに機能を絞ってると言っても、
コンビネータが足りなすぎて正直おもちゃの域を出ないのが俺の印象…。
0801798
2012/06/18(月) 19:37:31.91なるほどdelayか
reactive-bananaではaccumBがdelay相当のようだからそれを使って
あとvectorをリングバッファ代わりに使った
http://hpaste.org/70102
0802デフォルトの名無しさん
2012/06/19(火) 00:15:08.780803デフォルトの名無しさん
2012/06/19(火) 01:02:18.400804デフォルトの名無しさん
2012/06/19(火) 01:03:01.830805デフォルトの名無しさん
2012/06/19(火) 01:45:23.64まえはシミュレーションに燃えてたけど、燃え尽きてしまった。
0806デフォルトの名無しさん
2012/06/19(火) 01:48:00.32仕様からCのコードのスケルトンとユニットテスト用のコードを自動生成するプログラム
0807デフォルトの名無しさん
2012/06/19(火) 08:48:16.25内容も翻訳も素晴らしい。
0808デフォルトの名無しさん
2012/06/19(火) 15:42:36.62(><)
(⊃⊂)
0809デフォルトの名無しさん
2012/06/19(火) 17:17:31.00また変なのが湧くぞ
0810デフォルトの名無しさん
2012/06/19(火) 18:14:06.06全然ダジャレが翻訳されておらず、要するに翻訳の質が低い。
0811デフォルトの名無しさん
2012/06/19(火) 18:23:54.240812デフォルトの名無しさん
2012/06/19(火) 18:47:57.72ありがと。
本質的に異なる方法でもいくつかあるんだね。
アドバイスを受けて色々試してみたけど、
求めていた挙動はとりあえず実現できる事が分ってよかったよ。
ただ、バージョンが 0.6 なせいか、
>>800 の言うようにまだまだコンビネータが足りないね。
今回の質問の件も、できなくは無いという感じで、無理矢理感は拭えない。
reactive を参考にしてるのなら、1.0 までには取り入れてくれるといいな。
(参考元は開発が止まってるようだけど)
0813デフォルトの名無しさん
2012/06/19(火) 19:02:48.68レビュアーにいなかった、ってだけじゃないかw
0814デフォルトの名無しさん
2012/06/19(火) 19:25:31.47前のはアンインストールしといた方が良いですか?
0815デフォルトの名無しさん
2012/06/19(火) 19:32:08.81プログラミング初心者だがほとんど理解できなかったわ。
0816デフォルトの名無しさん
2012/06/19(火) 19:36:43.89そもそも Haskell がプログラミング初心者が学ぶ言語じゃない。
たしか、[言語設計者たちが考えること] って本で、
Haskell 委員会の一人も言ってた気がする。
0817デフォルトの名無しさん
2012/06/19(火) 19:59:23.24本当のプログラミング初心者なら問題ないと思う
Haskellの理解が難しいのは他言語の知識があるからだと思う
0818uy
2012/06/19(火) 20:23:54.77元々関数型は覚えにくい
そしてオブジェクト指向をするからさらに覚えにくくなる
先入観がなくても初心者は関数型なんて覚えられない
0819デフォルトの名無しさん
2012/06/19(火) 20:25:45.410820デフォルトの名無しさん
2012/06/19(火) 20:41:10.97Haskellの理解にオブジェクト指向の理解は必須じゃない
関数型も、他言語みたいな関数をしらなければ、「関数の関数」と説明すれば理解できると思う
0821デフォルトの名無しさん
2012/06/19(火) 20:50:16.55> そしてオブジェクト指向をするからさらに覚えにくくなる
ちょっとびっくりした。
0822デフォルトの名無しさん
2012/06/19(火) 20:57:33.35アグネスキタ━━(゚∀゚)━━!!!
0823デフォルトの名無しさん
2012/06/19(火) 21:08:56.60必死で実例探してコレなのか。 ご苦労様です。
0824デフォルトの名無しさん
2012/06/19(火) 22:15:40.67意図: ライブラリ(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'
解決法を教えてください
0825824
2012/06/19(火) 22:18:34.53ユーザアカウントでログインしてます
0826デフォルトの名無しさん
2012/06/19(火) 22:46:52.200827デフォルトの名無しさん
2012/06/19(火) 23:34:08.400828デフォルトの名無しさん
2012/06/20(水) 00:31:07.250829uy
2012/06/20(水) 02:03:43.51俺はお前ら2人の理解力のなさにびっくりだよ
>>817 にレスして先入観について言ってんだから
「オブジェクト指向をする」というのは他言語でって意味にしか見えないだろがアホか
0830デフォルトの名無しさん
2012/06/20(水) 02:30:34.18>先入観がなくても初心者は関数型なんて覚えられない
いちいち手続き型とかの経験や知識が前提としてないと覚えられない、使えない
って関数型言語って不便極まりないんだな。
0831デフォルトの名無しさん
2012/06/20(水) 05:13:46.86本当のプログラミング初心者なら問題ないと思う
Haskellの理解が難しいのは他言語の知識があるからだと思う
0832デフォルトの名無しさん
2012/06/20(水) 06:20:54.05ただし
馬鹿には無理
0833デフォルトの名無しさん
2012/06/20(水) 06:42:48.81ステマすんな
0834デフォルトの名無しさん
2012/06/20(水) 07:10:13.65教える側が、その言語を知らないと対応できなくなるのが辛いだけ
0835デフォルトの名無しさん
2012/06/20(水) 07:11:13.32それが肝になるような気がする。
0836デフォルトの名無しさん
2012/06/20(水) 08:38:53.84それ判る!
プログラミング初心者(1年くらいです)だけど、c、Javaみても何て言うか実行までの約束事が多くてピンと来なかった。
Haskellの後、Lisp、Ruby、Java、cと見ていってようやく判ったのは、最初から抽象度の低い言語ばかり使うと、コーディングは出来るけど、プログラミングの概念が育たないという事。
このあたりは数学にも似ている。
と言っても、cとかが駄目なわけじゃない。
現実の物理構成に依存した部分は誰かが作る必要がある。
現実に対処するための部分と、本来やりたいことを実現するための戦略とを同時に学べればよかったんだが、自分の知る限り、そういうカリキュラムとかテキストが見つからない。
0837デフォルトの名無しさん
2012/06/20(水) 11:36:29.49>コーディングは出来るけど、プログラミングの概念が育たないという事。
プログラミングとは、と屁理屈ばっかり捏ねて仕事が出来ないバカよりは
よっぽどそっちの方がいいけどな。
0838デフォルトの名無しさん
2012/06/20(水) 11:53:14.180839デフォルトの名無しさん
2012/06/20(水) 13:14:36.23Haskellの方が簡単できることもあるし、逆もある。
Haskellだとライブラリの利用==オレオレDSLの理解だったりするから困る。
0840デフォルトの名無しさん
2012/06/20(水) 13:42:24.95確かに静的に強く型付けされていて、型関係の機能が豊富な言語は、
言語を作るためのメタ言語、っていう感じがある。
0841827
2012/06/20(水) 15:50:10.46このWin32ライブラリの不具合は時期リリースで治る事を期待して
今しばらくは2011.4.0.0で耐え難きを耐え、忍び難きを忍ぼう
0842827
2012/06/20(水) 16:50:22.00こいつでインストールできたわ
これで勝つる!
0844デフォルトの名無しさん
2012/06/20(水) 18:55:54.350845デフォルトの名無しさん
2012/06/20(水) 21:51:38.74プログラミングの現場では、仕事ができるバカが一番有害
CやJavaはプログラミングの知識が乏しくても、ネットのコードを切り貼りするだけで、キチンと速く動くプログラムを大量に作ることができる
当然、保守などできない
一方、Haskellは、あるていど知識の閾値を超えていないと、マトモに動くプログラムを作れないので安心
0846デフォルトの名無しさん
2012/06/20(水) 22:06:08.33他の FRP(たとえば reactive など)で似たような概念のものってある?
0847デフォルトの名無しさん
2012/06/20(水) 22:10:17.57SignalGenは要するにIOみたいな物だと思えば良いと思う
delayとか、実行するタイミングによって結果のシグナルが異なる関数は、
純粋関数にはなれないからSignalGen上で走る
0848デフォルトの名無しさん
2012/06/20(水) 22:21:41.370849デフォルトの名無しさん
2012/06/20(水) 22:25:22.31すまん、質問が曖昧すぎた。
「そうやって使うものだ」という事は分ってる(つもりな)んだ。
要するに、ステートフルなシグナルは SignalGen で、ってことなんだろ?
(まぁライブラリの data SignalGen a の説明に書かれている事の受け売りだが)
そういう「使い方」と、signal "generator" という名前で表される「概念」
との繋がりがよく分らないんだ。
単にIOみたいなシグナル、シグナルのステートフル版なら、
SignalIO とか StatefulSignal とかでも良いと思うんだ。
generator って、何を generate するんだろ?
そんなの本当のところは作者にしか分らんのかも知れんが、
それが分る、というか合点がいくと、Elerea を上手に使えるような気がする。
0850デフォルトの名無しさん
2012/06/20(水) 22:34:09.71SignalGenはシグナルのステートフル版じゃないよ
elereaではステートフルでもステートレスでもシグナルの型はSignal
違いは、ステートレスなシグナルは純粋な関数で構築される
例: pure :: a -> Signal a
のに対して、ステートフルなシグナルはSignalGen上のmonadicな関数で構築されること
例: delay :: a -> Signal a -> SignalGen (Signal a)
シグナル生成関数(delayとかtransferとか)が動作する舞台だからSignalGenって名前なんじゃね
0851デフォルトの名無しさん
2012/06/20(水) 22:43:22.53別物
reactiveのreactive valuesに対応するのはsodiumのBehaviorだと思う
(sodiumのBahaviorは連続的に変化できない)
0852デフォルトの名無しさん
2012/06/20(水) 23:15:18.70使い始めてまだ数日(時間にすれば数時間もない)だから、
正直言ってそれでもまだモヤモヤするのだが・・・
シグナル生成関数が動作する舞台というのは、
なんとなくイメージし易いと思った。
なるほどね、「シグナルを生成するもの」ではなくて「舞台」か。
今まで考えた中では一番しっくりきた。
0853デフォルトの名無しさん
2012/06/20(水) 23:55:03.17data 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 との大きな違いを説明している大事なところなのに、よく分らない。
0854デフォルトの名無しさん
2012/06/21(木) 02:12:44.06generators はすべての新しい signals が生成されたときにスタートする
0855デフォルトの名無しさん
2012/06/21(木) 07:04:59.09たとえば、
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に作成されたことになるってこと
0856デフォルトの名無しさん
2012/06/21(木) 07:21:56.18Win32パッケージ入れ直したらそれを頼りとするパッケージも全部入れ直しになるのか
拷問だろ
0857uy
2012/06/21(木) 15:24:58.560858デフォルトの名無しさん
2012/06/21(木) 16:26:43.440859デフォルトの名無しさん
2012/06/21(木) 16:48:27.650860デフォルトの名無しさん
2012/06/21(木) 17:28:14.860861デフォルトの名無しさん
2012/06/21(木) 18:17:08.28もともと定理照明系を記述するための言語。
0862デフォルトの名無しさん
2012/06/21(木) 18:50:18.600863デフォルトの名無しさん
2012/06/21(木) 19:10:59.98大概のプログラミング言語は機械語上に構築された処理系で動作する。
0864デフォルトの名無しさん
2012/06/21(木) 19:22:09.76たぶんわざとだとは思いますが、
メタ言語(メタプログラミングのことですよね)の意味を
何か別のものと取り違えているように思えます。
0865デフォルトの名無しさん
2012/06/21(木) 19:52:28.58機械語を特別視する>>863はアホの鏡だな
0866デフォルトの名無しさん
2012/06/21(木) 20:07:39.990867デフォルトの名無しさん
2012/06/21(木) 20:19:16.73チューリング機械は同型を除いて一意的にしか定まらないと言いたいだけだな。
0868デフォルトの名無しさん
2012/06/21(木) 20:40:51.78メタ言語による対象言語のプログラミングが
(対象言語にとっての)メタ・プログラミングだから機械語が最強のメタ言語とか、
言いたいだけだろ。
0869uy
2012/06/21(木) 20:54:34.750870デフォルトの名無しさん
2012/06/21(木) 21:06:47.49もうだまされないぞー。
0871デフォルトの名無しさん
2012/06/21(木) 21:08:59.80metaの意味わかってねえ…
0872デフォルトの名無しさん
2012/06/21(木) 21:16:49.41わからないので解説してくれ。
0873デフォルトの名無しさん
2012/06/21(木) 21:35:02.29○○を構築する□□があるとき、□□を構築するモノをメタという
プログラミングをする人間がいるとき、人間をつくるセックスをメタという
0874デフォルトの名無しさん
2012/06/21(木) 21:43:24.020875デフォルトの名無しさん
2012/06/21(木) 21:46:16.47それだけじゃメタにならないでしょ
高次や高階の意味がそこには含まれていない
0876デフォルトの名無しさん
2012/06/21(木) 21:55:35.64接頭辞と言いたいのか?
今は形容詞的利用が多いけど。
0877デフォルトの名無しさん
2012/06/21(木) 22:00:30.01それは間違い
理由は、メタを分析したら、高次とか高階にあると思ってたけど実は同じレベルだったということが往々にしてあったから
だから、メタは「構成法」でしか定義できない
0878デフォルトの名無しさん
2012/06/21(木) 22:07:14.01「メタ」という用語で最も言いたいところは「上位」の観点があるというところだ。
何かを管理する場合は、何かその管理されるものにとって上位の存在じゃないと
管理ができない。
0879デフォルトの名無しさん
2012/06/21(木) 22:21:15.22自分の小遣い帳をつける行為は自分の行為を管理するメタな行為で
あるが、小遣い帳をつける行為は自分の行為なので実は同一レベルの行為。
しかし、小遣いを使う行為に対してはメタなのでメタである。
0880デフォルトの名無しさん
2012/06/21(木) 22:30:10.42という感じ?
0881デフォルトの名無しさん
2012/06/21(木) 22:31:55.82黙って結果を出すのが下
0882デフォルトの名無しさん
2012/06/21(木) 22:39:58.96「予想したり批評したりする」というくくりでそれを上に結びつけている行為は
予想したり批評したりしている奴にとってメタ。
同じく「黙って結果出す」というくくりを下と結びつける行為は
黙って結果出している奴にとってメタ。
0883デフォルトの名無しさん
2012/06/21(木) 22:43:06.21言語にとってC言語の関数はモノ。
0884デフォルトの名無しさん
2012/06/21(木) 22:45:14.730885デフォルトの名無しさん
2012/06/21(木) 22:46:57.690886デフォルトの名無しさん
2012/06/21(木) 22:49:33.66片方だけ訳していて一貫性はないがなんか面白い。
0887デフォルトの名無しさん
2012/06/21(木) 22:53:00.990888デフォルトの名無しさん
2012/06/21(木) 23:08:31.13と思っているようなやつになりたくないわ。
0889デフォルトの名無しさん
2012/06/22(金) 00:44:29.22どっちがどっちかいまだに迷う
0890デフォルトの名無しさん
2012/06/22(金) 01:09:05.870891デフォルトの名無しさん
2012/06/22(金) 02:31:33.22モナークモナークのことを覚えていたんだった。
0892デフォルトの名無しさん
2012/06/22(金) 02:36:44.39こんなところで油売ってないで新作出せよ。怒るぞ
0893デフォルトの名無しさん
2012/06/22(金) 07:29:49.560894デフォルトの名無しさん
2012/06/22(金) 13:55:34.450895Perl忍者 ◆M5ZWRnXOj6
2012/06/22(金) 17:00:28.04相変わらず
0896デフォルトの名無しさん
2012/06/22(金) 20:11:43.92こっちこいよhttp://toro.2ch.net/test/read.cgi/tech/1338365782/
uy が惨殺されたばかりでつまらんのだ。
0897デフォルトの名無しさん
2012/06/22(金) 21:36:55.02周りに流されたら流されたにふさわしい結果が待っている。
特に必要性のない知りたいわけでもないことを知ろうとしても意味が無い。
0898デフォルトの名無しさん
2012/06/22(金) 22:01:24.88前から気になってたから、重い腰を上げてトライしてみることにした。
が
何から手を付ければいいのか分らない。
FRP経験はyampaでちょっと遊んだ程度なんだけど、あまりに違いすぎる。
優しく教えてくれるページとかって無い?
0899デフォルトの名無しさん
2012/06/22(金) 22:02:54.420900デフォルトの名無しさん
2012/06/23(土) 01:35:27.39なんであんなローカル定義使いまくるのやら・・・
相互再帰が必要なものは仕方ないとしても、せめて型注釈ぐらい書いてくれよと
0901デフォルトの名無しさん
2012/06/23(土) 01:43:02.38速攻で廃れそう
FRPを本気で使うのは、Haskellプラットホームに標準装備されてからにしよう
0902デフォルトの名無しさん
2012/06/23(土) 09:28:37.150903デフォルトの名無しさん
2012/06/23(土) 10:25:26.930904827
2012/06/23(土) 21:06:13.782000はサポート内じゃ?
それはそうとプラットフォーム辞めてGHC7.4.2の方も試してみたけど
やはりWin32パッケージで不具合出ました
0905デフォルトの名無しさん
2012/06/23(土) 21:25:43.79GHCはまだ2000をサポートしてるんだな
でも、実際にはXP以降専用のAPIを使ってるみたいだ
0906デフォルトの名無しさん
2012/06/24(日) 00:52:42.60なんかコツがあるのかね
0907デフォルトの名無しさん
2012/06/24(日) 00:59:35.540908デフォルトの名無しさん
2012/06/24(日) 01:10:08.530909デフォルトの名無しさん
2012/06/24(日) 01:38:17.54頭の中が知りたいってことです
0910デフォルトの名無しさん
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
俺は使わんけどな。
0911デフォルトの名無しさん
2012/06/24(日) 05:17:34.49こっち見んな
0912デフォルトの名無しさん
2012/06/24(日) 10:32:56.12感謝です
0913デフォルトの名無しさん
2012/06/24(日) 10:36:14.580914デフォルトの名無しさん
2012/06/24(日) 10:41:01.630915デフォルトの名無しさん
2012/06/24(日) 11:41:55.71なの?
0916デフォルトの名無しさん
2012/06/24(日) 17:18:34.75まぁそういう関数は書けんけどね。
TH様に頼るしかない。
0917デフォルトの名無しさん
2012/06/24(日) 17:54:28.67ただ単にトリッキーなだけなら、仕様でできないようにしてほしい
初心者がネットからコピペしてコードに混ぜたら、保守するときに誰も理解できない
0918デフォルトの名無しさん
2012/06/24(日) 17:57:57.25まさか、定義不可能なものを「仕様にしてほしい」とか言ってないよね?
0919デフォルトの名無しさん
2012/06/24(日) 17:58:28.41理解できないコードなんて無いはずだ
時間はかかるが、簡約を勧めれば必ず理解できる
0920デフォルトの名無しさん
2012/06/24(日) 18:34:24.18トリッキーなコード
・可読性も生産性も保守性も発展性もなく、ただ単に「お前は知らないだろうけど、知ってる俺はすげーだろ」と言いたいがために用意されたようなコード
・過去においては意味があったかもしれないが、現在のマシン環境や理論では有用性が消失したのに、プログラマの話題の種のためだけに残ってるようなコード
・保守しているときに腹しか立たないコード
理論的に意味のあるコード
・プログラムとして読みにくくても、それを支える理論(誰もが確認できるテキスト等に記載された周知の知識)から考えると、冗長に記述するとかえって理解が悪くなるコード
0921デフォルトの名無しさん
2012/06/24(日) 18:56:59.830922デフォルトの名無しさん
2012/06/24(日) 19:38:03.84仕事で使ってるとこはどうやってるんだろう?
0923デフォルトの名無しさん
2012/06/24(日) 19:48:40.570924デフォルトの名無しさん
2012/06/24(日) 19:53:48.210925デフォルトの名無しさん
2012/06/24(日) 19:54:12.59プログラム算法厨ってどんなの?
0926デフォルトの名無しさん
2012/06/24(日) 20:04:54.79>>918が言ってるのは要するに「与えられたソースコードにトリッキーなコードが含まれているかどうかを判定するプログラム」を書けってことだよ。
0927853
2012/06/24(日) 20:37:05.55ありがとう、レス遅くなってスマン。
ずっと考えてたんだが、正直いまいち理解できていない。
作成時刻というのが、なんか実装の辻褄合わせのために
無理矢理入れた概念みたいな感じを受ける。
あと、どうもそもそも Signal の意味をちゃんと理解できていないと思った。
discrete time FRP なんだから、Double -> a じゃなく Nat -> a なのは分るけど、
この Nat は離散「時間」というよりは「順番」や「番号」みたいなモノなのかな。
離散時間を明示的には扱えないのも、時間じゃないから?
へたに reactive や banana の知識があるせいか、
この辺りもやもやしてスッキリしないから論文を当たってみるわ。
(Efficient and Compositional Higher-Order Streams)
0928デフォルトの名無しさん
2012/06/25(月) 00:44:11.39C言語だとlintの派生みたいなツールでトリックコードやマジックナンバーを排除できるけど、Haskellのlintってそういうのはしてくれますかね?
一度使って警告出まくってからずっと触ってないけど
0929デフォルトの名無しさん
2012/06/25(月) 06:13:24.04諸葛亮の木牛流馬としてわざとライバル企業に盗ませる
0930デフォルトの名無しさん
2012/06/25(月) 06:29:50.52ソースコードから
それぞれの担当の功労度を割り出すプログラムを作れってこと?
0931デフォルトの名無しさん
2012/06/25(月) 07:23:14.67そういう意味ではないと思うよ。
>>917 は「仕様でできないようにしてほしい」と言っている。
この仕様というのは言語仕様だろうね。
(別のコンパイラなら通ってしまうのなら >>917 の希望は満たされないし)
仕様でできないようにするということは、
コンパイラがそのようなコードをエラーとして弾くということ。
トリッキーなのか、それ以外なのか、コンパイラが見抜けなければならない。
そのためには、トリッキーとは何かを
言語仕様として組み込める程度には詳細に定義する必要がある。
>>918 で言ってるのはそういう事だと思う。
>>920 のは、言語仕様として組み込むにはほど遠い定義だと俺も思う。
>>920 は定義の意味を取り違えているようなので、
>>926 で改めて、同じ意味の事を別の言葉で問い質したのだと思う。
言語仕様として組み込める程度に詳細な定義というのは、その定義をもとに、
そのような判断をするプログラムをコンパイラ実装者が作れるという意味だよ、と。
0932デフォルトの名無しさん
2012/06/25(月) 07:56:40.890933デフォルトの名無しさん
2012/06/25(月) 11:18:01.61順序を離散時間で表すのはかなり広範囲に使われているイデオムの一つ。
イベント、ストリーム、並列、分散などの分野で。
初期の有名なのはLaTeXのLamportさんのnetwork time(lamport's timestamp)。
1978年の論文だから、このスレの多くの人は生まれてないかもね。
明示的に離散時間が出てこなくても、イベントの生成にタイプごとに順序制約があって、
プロトコルに陰に含まれている場合もある。
Yampaは少し隠そうとしている。
Elereaは明示的に扱っている分、プリミティブを少なくできている。
0934デフォルトの名無しさん
2012/06/25(月) 15:54:48.01>>917はトリッキーなコード全てをエラーにして欲しいと言ってるんじゃなく、
>>910が一般的に見てトリッキーなら>>910をエラーにして欲しいってことだろ?
>>910を厳密に定義する必要はあるが、「トリッキーなコード」を厳密に定義する必要なんてどこにもない
根本的にズレてない?
0935デフォルトの名無しさん
2012/06/25(月) 17:03:02.96そりゃ初見じゃ分かりにくいかもしれないけど、丁寧に型を考えれば分かるだろ
慣れてないと分かりにくいってだけでエラーにしていったら、真っ先にモナドとかアローとかをエラーにしなきゃダメじゃん
0936デフォルトの名無しさん
2012/06/25(月) 17:12:37.580937デフォルトの名無しさん
2012/06/25(月) 17:27:34.130938デフォルトの名無しさん
2012/06/25(月) 17:44:43.13dot fに関して
(->)っていう型構築子によって作られる葉が型である型レベル木を右に潜って行ってたどり着いた先にfを適用するってイメージなんだから
レンズの概念で最右部にアクセスするレンズみたいなのを考えてそれを使って値レベルの木を操作し、
それを型レベルの木に持ち上げて・・・とか出来ないのかな
そう考えると($) ((.).(.)) fは($)がmodify、(.)が木の右にアクセスするレンズでそれを二つ合成
という具合にただのレンズを使った更新操作に見えてくる
同様に他のポイントフリー用のイディオムも何らかの抽象を持ってすれば型レベルのデータ構造に対する何らかの操作として
解りやすく捉えられるとかあると思う
0939デフォルトの名無しさん
2012/06/25(月) 17:58:07.400940デフォルトの名無しさん
2012/06/25(月) 18:13:24.330941デフォルトの名無しさん
2012/06/25(月) 18:35:44.37(a,b,c) -> d のような関数は適用する前の型より後の型が簡単になる
適用した後の型が複雑になる関数は色々難しい
const :: a -> (b->a)
(.) :: (a->b) -> ((c->a)->(c->b))
0942デフォルトの名無しさん
2012/06/25(月) 18:50:16.06言いたいことはわかるが、それってカリー化が原因か?
0943デフォルトの名無しさん
2012/06/25(月) 19:09:25.86>>917 は 「理論的に意味のあるコードならそのまま」 で、
「ただ単にトリッキーなだけなら排除」 するような仕様にしてほしいと言っています。
仕様と言うからには、ただ単にトリッキーなだけのコード 「全て」 ですよね。
それとも、単に >>910 に限定して、これが単なるトリッキーコードならエラーにする、
そういう仕様を Haskell という言語に盛り込んでほしいと言っているのでしょうか?
そうではないと思います。
そのような限定的な仕様は馬鹿げています。
やはり >>910 がもし単なるトリッキーコードなら、その >>910 が代表するような
単にトリッキーなだけのコード 「全て」 をエラーにする仕様を望んでいるのでしょう。
であれば、やはり何を以て単なるトリッキーコードなのかを定義する必要があることには
変わりないと思います。
0944デフォルトの名無しさん
2012/06/25(月) 21:28:20.32「仕様に盛り込め」じゃなくて、「仕様から削除しろ」という要求です
2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかった仕様を削除しろという要求です
仕様から削除できないなら、今までのプログラム人生で、2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかったコードを書くなというお願いです
0945デフォルトの名無しさん
2012/06/25(月) 21:43:32.49(.) が定義されるなら ((.).(.)) も定義できるんだから
まず (.) をPreludeから排除する必要がある。
しかし、ただPreludeから削除しただけでは
ユーザが勝手に定義するのは止められないから、
演算子の自由な定義も削る必要がある。
さらに、ユーザ定義演算子を禁止しても
d :: (b -> c) -> (a -> b) -> a -> c みたいな関数があれば
d d d と書けてしまうので、高階関数も仕様から削る必要がある。
0946デフォルトの名無しさん
2012/06/25(月) 21:52:41.83> 初心者がネットからコピペしてコードに混ぜたら、保守するときに誰も理解できない
それは初心者に保守が必要な Haskell の仕事を任せた者の責任だ
0947デフォルトの名無しさん
2012/06/25(月) 21:54:18.83もし関数適用が1回だけならカリー化は関係ない
何回もネストする原因がカリー化
((f .) .) = curry . (f .) . uncurry
(((f .) .) .) = curry . curry . (f .) . uncurry . uncurry
const . const = curry . const
const . const. const = curry . curry . const
0948デフォルトの名無しさん
2012/06/25(月) 21:55:16.73ということは、ただ単にユーザが ((.).(.)) を使わなければいいだけじゃん
普通のポイントフリーは使い道あるから削らなくていい
0949デフォルトの名無しさん
2012/06/25(月) 21:56:59.21初心者でも実行できるコードを書けてしまうHaskellの責任だ
でないと、ソフトウェア科学は、C言語の時代から何も学んでいないと言われてしまう
0950デフォルトの名無しさん
2012/06/25(月) 21:57:25.26知ってればぼやきながら許容できるコードだし、 ←俺はこれ
慣れてれば当然の書き方だと思う
0951デフォルトの名無しさん
2012/06/25(月) 22:07:13.71また別の人には無駄に冗長な初心者くさいコードに見えるるということは普通にある(他の言語でもあると思うけど)
チームで仕事してるなら、そのチームにとってどういうコードが常識的か把握しとけって話になるけど、
webに置いてあるコードとかなら文句を言いながらでも頑張って読むしかない
0952デフォルトの名無しさん
2012/06/25(月) 22:08:23.32ユーザ定義演算子も高階関数もカリー化も無い言語を使えば良いんだよ
そんな言語なんて山ほどあるだろ
Haskell使う必要ない
0953デフォルトの名無しさん
2012/06/25(月) 22:11:46.90よく分らない部分がある。
> 2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかった仕様
これは、具体的にはどんな仕様のことを指しているの?
Haskell 2010 Language Report(http://www.haskell.org/onlinereport/haskell2010/)
この中から、これが一例だというものは挙げられる?
それとも、今後そのような仕様が見つかった場合には削除してほしいという意味?
それならたぶん、今までもいくつか行われてきたような気がする。
例えば recursive do 表記とか。
まぁ、これはやはり役立つからと後でまた復活したけど。
0954デフォルトの名無しさん
2012/06/25(月) 22:15:29.93あぁ、すまん
例が悪かったか
recursive do は Haskell の仕様じゃなくて、
コンパイラ GHC の方の仕様だったかも
0955デフォルトの名無しさん
2012/06/25(月) 22:20:02.83やっぱり、エラーにするのは不都合が大きいので、そういうコードを書いた人をイジメぬいて退社させればいいと思う
0956デフォルトの名無しさん
2012/06/25(月) 22:50:14.21\x y z -> x + y ^ z
を
flip ((.).(.))(^).(+)
と書くやつが居たら殴っていい
0957デフォルトの名無しさん
2012/06/25(月) 22:51:13.64> 仕様から削除できないなら、今までのプログラム人生で、2chやフォーラムに書き込んで「俺だけが知っててスゲーだろ」と思った以外に使い道がなかったコードを書くなというお願いです
最後が曖昧で、俺は「そういうコードを公の場に晒すな」という意味で捉えたけど、あってる?
もしそうだとしたら、そのお願いが叶えられることは、今後まずないと思う。
と言うかそれは、コードを読む側が「自分にとっては役に立たない単なる自慢コード」
なのかを今の自分の能力を総動員して見極める事柄じゃないの?
Haskell のコードに限らず、ネットに公開されている情報全てに言えることでしょ。
役に立つかどうかに限らず、嘘か本当かという話にも繋がる。
一対一の教師と生徒という関係ならまだ分らなくもないけど、
コードを公開する全くの赤の他人にそれをお願いするのは、怠慢だと思うよ。
0958デフォルトの名無しさん
2012/06/25(月) 22:57:28.020959デフォルトの名無しさん
2012/06/25(月) 23:08:53.82書いた本人には、「『書いた本人にとって』自慢する以外に役に立たないコードかどうか」判断できないってこと?
もし判断できないなら、病院に行った方がいいと思う
もし判断できていて、本当に自慢以外に役に立たないと判断していたら、自分のやってることは悪いことだと自覚すべきだと思う
0960デフォルトの名無しさん
2012/06/25(月) 23:12:21.140961デフォルトの名無しさん
2012/06/25(月) 23:23:40.83条件とラムダを使わないと無理ですよね
0962デフォルトの名無しさん
2012/06/25(月) 23:31:23.00本当にそれが「悪い」とまで言えるのか、誰にとってどれほど「悪い」のか、
という話はとりあえず置いておくとして。
そういう気持ちは分るし、役立つものだけが公開されるようにしようという
貴方の運動や働きかけを否定している訳ではないんだ。
ただ、お願いするだけなら、その願いは叶えられないと思うよ。
そんな甘くはない。
そして、ネット上に誰もが簡単に自由にどんな情報でも発信できる今の時代、
受け手側が自分の責任で情報を解釈できる力を求める気運が高まってるのは事実。
受け手側の能力を高める運動や働きかけをした方が、良い方向へ向うスピードは速いと思うな。
0963デフォルトの名無しさん
2012/06/25(月) 23:35:09.410964デフォルトの名無しさん
2012/06/25(月) 23:35:25.120965デフォルトの名無しさん
2012/06/25(月) 23:44:33.140966デフォルトの名無しさん
2012/06/25(月) 23:46:25.13可哀想に
0967デフォルトの名無しさん
2012/06/25(月) 23:50:28.03それは、使える関数は mod のみ、使える演算子は (.) のみ、という意味か?
0968デフォルトの名無しさん
2012/06/25(月) 23:58:01.51はい
gcd' = (.)(.)(.) gcd' mod
みたいなかんじで
0969デフォルトの名無しさん
2012/06/26(火) 00:19:14.61モジュロ計算と、自身の再帰的定義だけで
最大公約数って求められるものだったっけ?
0970デフォルトの名無しさん
2012/06/26(火) 00:22:38.47パターンマッチ?
0971デフォルトの名無しさん
2012/06/26(火) 01:07:08.94そんな脊髄反射するほどのことか?
0972デフォルトの名無しさん
2012/06/26(火) 01:26:08.170973デフォルトの名無しさん
2012/06/26(火) 01:39:35.40gcd x 0 = x
これは書いてよくて、一般的な場合だけポイントフリーにするならいけるんじゃない?
0974デフォルトの名無しさん
2012/06/26(火) 02:49:42.80gcd' x 0 = x
gcd' x y = gcd'' x y
gcd'' = (\x y -> gcd' (mod x y) (mod y x))
この最後の行をポイントフリーにするってことか。考えたけど解らん
0975デフォルトの名無しさん
2012/06/26(火) 08:28:42.18gcd' (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でやれという話だし
0976デフォルトの名無しさん
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 )
で(多分)動く…
0977デフォルトの名無しさん
2012/06/26(火) 10:18:22.05(.)だけで、1つの引数を複数箇所で使用することは可能なのかな…
0978デフォルトの名無しさん
2012/06/26(火) 10:52:46.560979デフォルトの名無しさん
2012/06/26(火) 11:14:22.071.関数を1つ決めます
2.既存の関数の集合からは定義できない関数を1つ挙げます
3. 2.で挙げられた関数を、既存の関数の集合に加えます
2.と3.を繰り返します
2.で挙げた関数が以下のいずれかの条件を満たすと負けです
・既存の関数から定義可能
・既存の関数の集合にその関数を加えるとチューリング完全にる(λxy.xとλxyz.xz(yz) が定義可能になる)
他の人が挙げた関数がいずれかに該当していると思ったら、指摘して証明しましょう 証明できたらその人の負け 証明できなければあなたの負けです!
※関数の型に、「関数型」を除く具体的な型や型制約があってはいけません つまり、関数の型は、Haskell表記で、小文字英数字と()と->だけで表されなくてはいけません
数値関数や文字列関数、リスト関数等は不可ということです
家族と、友達と、恋人と、大いに盛り上がること間違いなしですね!!!
0980デフォルトの名無しさん
2012/06/26(火) 15:55:42.83チューリング完全しばりこぇー
0981デフォルトの名無しさん
2012/06/26(火) 16:33:03.71そのルールがないと、sとkを挙げた時点で終了してしまいますからね
0982デフォルトの名無しさん
2012/06/26(火) 16:48:31.56C言語の関数ポインタもトリッキーで何やってるのか解
らないコードになるから全面禁止すべきだよな。
というかそもそもC言語はポインタが初心者に理解できないんだから
仕様でポインタなくすべきだ。初心者に保守できない言語はみんなクソ。
英文科出身でワードとエクセルしかできない俺にでも理解できる
言語をみんな作るべき。そうじゃないならつくった奴が馬鹿アホ間抜け
だということ。
初心者最強。誰でも生まれたときは初心者。初心者は神。
0983デフォルトの名無しさん
2012/06/26(火) 17:25:05.210984デフォルトの名無しさん
2012/06/26(火) 18:00:19.140985デフォルトの名無しさん
2012/06/26(火) 18:02:20.23ホントどうでもいい話題ほど止まらんよな、このスレ…。
0986デフォルトの名無しさん
2012/06/26(火) 18:03:42.990987デフォルトの名無しさん
2012/06/26(火) 18:17:23.65つまり安全神話を回避
0988デフォルトの名無しさん
2012/06/27(水) 06:23:47.45for( 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]
0989デフォルトの名無しさん
2012/06/27(水) 06:59:55.100990デフォルトの名無しさん
2012/06/27(水) 07:05:53.770991デフォルトの名無しさん
2012/06/27(水) 08:01:09.39もうPythonでもリスト内包表記使えるぞと指摘するのに疲れた
print([x*2 for x in [1, 2, 3, 4, 5] if 2 < x < 5])
0992デフォルトの名無しさん
2012/06/27(水) 08:34:15.60[hoge(変数) for 変数 in [〜] if 条件]
の構文(後置 if ?)って
リスト内包のときしか使えない?
for 変数 in [〜] if 条件:
hoge(変数)
ってやるとおこられる
気のせい?
0993デフォルトの名無しさん
2012/06/27(水) 09:21:31.30for 変数 in [〜 if 条件]:
ならできる
0994デフォルトの名無しさん
2012/06/27(水) 09:21:31.870995デフォルトの名無しさん
2012/06/27(水) 10:21:52.35ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
0996デフォルトの名無しさん
2012/06/27(水) 10:28:29.800997デフォルトの名無しさん
2012/06/27(水) 10:44:45.38ありがとう
次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
次スレ
ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。