関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
151デフォルトの名無しさん
2017/02/16(木) 20:28:16.21ID:qwVWj3LU 言語仕様はともかく実行環境がおそ松すぎる
152デフォルトの名無しさん
2017/02/16(木) 21:04:48.77ID:lgZA8NJM153デフォルトの名無しさん
2017/02/17(金) 08:05:51.13ID:nCBINic8 >>151
腐女子なの?
腐女子なの?
154デフォルトの名無しさん
2017/02/17(金) 08:37:50.87ID:iKIs1hpk 遅いと言われようと、フィボナッチ数列をzipWithで1行で書ける言語というところに魅力を感じている
(そんなに何度もフィボナッチ数列を書く機会があるわけではないが表現力の一例として)
(そんなに何度もフィボナッチ数列を書く機会があるわけではないが表現力の一例として)
155デフォルトの名無しさん
2017/02/17(金) 10:28:30.13ID:nCBINic8156デフォルトの名無しさん
2017/02/17(金) 13:55:10.09ID:gJ+iD/w/ パスカルの三角形を出したいんだけど、
++使ってるのが気に食わないのだがうまく消せなかった
import Data.List (unfoldr)
pastri :: [[Int]]
pastri = unfoldr (\l -> Just (l, body l)) [1]
where
body xs = 1 : zipWith (+) xs (tail xs) ++ [1]
main = mapM_ print $ take 15 pastri
++使ってるのが気に食わないのだがうまく消せなかった
import Data.List (unfoldr)
pastri :: [[Int]]
pastri = unfoldr (\l -> Just (l, body l)) [1]
where
body xs = 1 : zipWith (+) xs (tail xs) ++ [1]
main = mapM_ print $ take 15 pastri
157デフォルトの名無しさん
2017/02/17(金) 19:08:56.34ID:ishbEDrB 型に関数型のデータを持たせることはできますか?
GHC.TypeLitsで自然数型のデータをもたせることは出来ましたがどうやら関数型は無いようです
ニュアンスとしては以下のような事をやりたいです
newtypeでaを定義し直しMonoidのインスタンスにすれば同じ処理は出来ますが
冗長性を省いてシンプルに記述したいです
newtype Hoge (f :: a->a->a) (a :: *) = Hoge a deriving Show
instance (Num a) => Monoid (Hoge f a) where
mempty = Hoge 0
(Hoge x) `mappend` (Hoge y) = Hoge (f x y)
GHC.TypeLitsで自然数型のデータをもたせることは出来ましたがどうやら関数型は無いようです
ニュアンスとしては以下のような事をやりたいです
newtypeでaを定義し直しMonoidのインスタンスにすれば同じ処理は出来ますが
冗長性を省いてシンプルに記述したいです
newtype Hoge (f :: a->a->a) (a :: *) = Hoge a deriving Show
instance (Num a) => Monoid (Hoge f a) where
mempty = Hoge 0
(Hoge x) `mappend` (Hoge y) = Hoge (f x y)
158デフォルトの名無しさん
2017/02/17(金) 20:56:35.22ID:BpdtDTW+ data Hoge a = Hoge (a -> a -> a) a
これだとHoge f 0とHoge g 0の型は同じになってしまう
引数fをgに変えると戻り値の型が変わるような関数Hogeは動的言語なら作れるかも
これだとHoge f 0とHoge g 0の型は同じになってしまう
引数fをgに変えると戻り値の型が変わるような関数Hogeは動的言語なら作れるかも
159デフォルトの名無しさん
2017/02/17(金) 21:34:57.67ID:WL7YVLDK >>156
長さが異なるリスト同士の zipWith で、短い方の末尾をデフォルト値で補って長さを揃える、
そんな関数 zipWith' を作ってはどうでしょうか。
zipWith' :: (a -> a -> a) -> a -> [a] -> [a] -> [a]
zipWith' _ _ [] [] = []
zipWith' f d [] (y:ys) = f d y : zipWith' f d [] ys
zipWith' f d (x:xs) [] = f x d : zipWith' f d xs []
zipWith' f d (x:xs) (y:ys) = f x y : zipWith' f d xs ys
これを使えば、例えば [1, 3, 3, 1] から [1, 4, 6, 4, 1] は次のようにして作れます。
let xs = [1, 3, 3, 1]
zipWith' (+) 0 xs (0 : xs)
この関数は一方だけでも無限リストだと止まらないので注意が必要ですが、
ときどき役に立つので私は自分のツールボックスに入れています。
長さが異なるリスト同士の zipWith で、短い方の末尾をデフォルト値で補って長さを揃える、
そんな関数 zipWith' を作ってはどうでしょうか。
zipWith' :: (a -> a -> a) -> a -> [a] -> [a] -> [a]
zipWith' _ _ [] [] = []
zipWith' f d [] (y:ys) = f d y : zipWith' f d [] ys
zipWith' f d (x:xs) [] = f x d : zipWith' f d xs []
zipWith' f d (x:xs) (y:ys) = f x y : zipWith' f d xs ys
これを使えば、例えば [1, 3, 3, 1] から [1, 4, 6, 4, 1] は次のようにして作れます。
let xs = [1, 3, 3, 1]
zipWith' (+) 0 xs (0 : xs)
この関数は一方だけでも無限リストだと止まらないので注意が必要ですが、
ときどき役に立つので私は自分のツールボックスに入れています。
160デフォルトの名無しさん
2017/02/17(金) 22:22:44.78ID:nCBINic8 パスカルの三角形はロゼッタコードにあるのが限界でしょ
Pascal's triangle - Rosetta Code
https://rosettacode.org/wiki/Pascal%27s_triangle#Haskell
Pascal's triangle - Rosetta Code
https://rosettacode.org/wiki/Pascal%27s_triangle#Haskell
161デフォルトの名無しさん
2017/02/18(土) 01:35:58.15ID:4ADoOqjk >>156
以前にこんなのを書いたことがある
pascal :: (Integral a) => [[a]]
pascal = map (1:) $ (:) (repeat 0) $ zipWith (zipWith (+)) pascal $ map tail pascal
-- pascal =>
[
[1,0,0,..],
[1,1,0,0,..],
[1,2,1,0,0,..],
[1,3,3,1,0,0,..],
..
]
2重リストなんで見た目複雑だけど発想としては
fib = 0:1: zipWith (+) fib (tail fib)
とほぼ同じ
以前にこんなのを書いたことがある
pascal :: (Integral a) => [[a]]
pascal = map (1:) $ (:) (repeat 0) $ zipWith (zipWith (+)) pascal $ map tail pascal
-- pascal =>
[
[1,0,0,..],
[1,1,0,0,..],
[1,2,1,0,0,..],
[1,3,3,1,0,0,..],
..
]
2重リストなんで見た目複雑だけど発想としては
fib = 0:1: zipWith (+) fib (tail fib)
とほぼ同じ
162デフォルトの名無しさん
2017/02/18(土) 12:34:28.15ID:OQ3VgdS2 ++をネタにする作者の気持ちをスルーしてパスカルの三角形を熱く語る
理系の鑑
理系の鑑
163デフォルトの名無しさん
2017/02/19(日) 07:14:56.06ID:rxEXn9HF pascal = map (takeWhile (/= 0)) $ iterate (\xs -> 1 : zipWith (+) xs (tail xs)) (1 : repeat 0)
http://melpon.org/wandbox/permlink/HLKtAXzGodOF3ZGP
http://melpon.org/wandbox/permlink/HLKtAXzGodOF3ZGP
164デフォルトの名無しさん
2017/02/19(日) 10:09:57.42ID:obWbRffz ところで・・・
コメントを読まなくても、どのように計算しているのかがぱっと見て分かる、
それが関数型が持つ高い宣言性の良いところ。
また、そのようにプログラムしても、もともとGHCが持つ優秀な最適化能力や、
プログラムの見た目を壊すことなく最適化を促すことができる仕組みのおかげで、
結果的にかなり効率の良い処理がなされる実行ファイルが出力される。
(実用的なアプリケーションで十分に耐えられる)
にも関わらず、そのメリットをあえて潰すようなプログラムをする人が稀にいるが、
純粋関数型のHaskellを使っておきながら、他に優先すべき事項があるのだろうか。
まぁ、縛りパズルをして遊んでいるのなら分かるが。
コメントを読まなくても、どのように計算しているのかがぱっと見て分かる、
それが関数型が持つ高い宣言性の良いところ。
また、そのようにプログラムしても、もともとGHCが持つ優秀な最適化能力や、
プログラムの見た目を壊すことなく最適化を促すことができる仕組みのおかげで、
結果的にかなり効率の良い処理がなされる実行ファイルが出力される。
(実用的なアプリケーションで十分に耐えられる)
にも関わらず、そのメリットをあえて潰すようなプログラムをする人が稀にいるが、
純粋関数型のHaskellを使っておきながら、他に優先すべき事項があるのだろうか。
まぁ、縛りパズルをして遊んでいるのなら分かるが。
165デフォルトの名無しさん
2017/02/19(日) 11:37:29.74ID:TYcfVj75 今ここで言う必要のないものを必要と思い込むことも縛りのパターンの一つ
166デフォルトの名無しさん
2017/02/19(日) 18:51:42.32ID:rxEXn9HF どうしても難解になりがちはワンライナーやコードゴルフで遊ぶのは人の自由だと思うけど遊び以外で使うのはたしかにどうかと思う
167デフォルトの名無しさん
2017/02/19(日) 19:20:27.12ID:Mzz/1Hry ポイントフリー教も1変数のパイプみたいなやつならまだ分かるのだが
(中間変数が無くなるから効率が上がるという話もある、
そのくらいGHCが最適化してくれてもよさそうなのに)
2変数以上になると完全に暗号めいてて困る
(中間変数が無くなるから効率が上がるという話もある、
そのくらいGHCが最適化してくれてもよさそうなのに)
2変数以上になると完全に暗号めいてて困る
168デフォルトの名無しさん
2017/02/19(日) 20:52:17.90ID:TYcfVj75 xss = (1 : repeat 0) : [ zipWith (+) (0 : xs) xs | xs <- xss ]
pascal = [ takeWhile (/=0) xs | xs <- xss ]
これは2変数というか2重ループ
それと再帰のために自分自身に名前をつけた時点でポイントフリーは諦めている筈
pascal = [ takeWhile (/=0) xs | xs <- xss ]
これは2変数というか2重ループ
それと再帰のために自分自身に名前をつけた時点でポイントフリーは諦めている筈
169デフォルトの名無しさん
2017/02/19(日) 23:43:55.15ID:rxEXn9HF ポイントフリーって何?こういうこと?
pascal = map (takeWhile (/= 0)) $ iterate ((1 :) . map sum . transpose . take 2 . tails) (1 : repeat 0)
http://melpon.org/wandbox/permlink/bYSi5tfNVy5zfzPg
pascal = map (takeWhile (/= 0)) $ iterate ((1 :) . map sum . transpose . take 2 . tails) (1 : repeat 0)
http://melpon.org/wandbox/permlink/bYSi5tfNVy5zfzPg
170デフォルトの名無しさん
2017/02/20(月) 00:18:45.73ID:mtupkOQi 変数名かんがえたくないときポイフリできたらしちゃうことある
171デフォルトの名無しさん
2017/02/20(月) 00:20:11.39ID:bFWxmJHr172デフォルトの名無しさん
2017/02/20(月) 20:56:54.49ID:uIdMc98M ArrowLoopがどういうインターフェイスなのかいまいちよく分からないけど
その定義でどう動くかはfによるとしか・・・
その定義でどう動くかはfによるとしか・・・
173デフォルトの名無しさん
2017/02/20(月) 22:57:03.60ID:tib6qfwe 結局ハードウェアの動きとあまりに乖離しすぎてるってのが
普及しない理由じゃないかと。
普及しない理由じゃないかと。
174デフォルトの名無しさん
2017/02/21(火) 04:45:41.06ID:bkUsfADx 量子コンピュータが普及する時は言語どうなるんかな
CPUに合わせた新しい言語になるのか、今の言語をベースにコンパイラに任せるのか
原理とか全く知らなくて言ってるけど
CPUに合わせた新しい言語になるのか、今の言語をベースにコンパイラに任せるのか
原理とか全く知らなくて言ってるけど
175デフォルトの名無しさん
2017/02/21(火) 11:55:34.70ID:hz5m2IGZ メモリとCPUが分離しすぎているおかげでメモリ上のデータ構造に変化がない
OOPははそこを変えようとしたのか
分離するのやめれば破壊的イノベーションが起きるのではと
OOPははそこを変えようとしたのか
分離するのやめれば破壊的イノベーションが起きるのではと
176デフォルトの名無しさん
2017/02/21(火) 19:46:11.18ID:CLRDv6M0 ほんとぉ?
177デフォルトの名無しさん
2017/02/21(火) 22:11:08.30ID:3rYbm5Zu golangはOOPとは違うような
178デフォルトの名無しさん
2017/02/22(水) 01:32:49.98ID:doFig/5A179デフォルトの名無しさん
2017/02/22(水) 11:25:20.39ID:C8G0Nbdq ContrainedなFunctorを実装していて直面した問題です
問題の本質を以下の単純化したコードで例示します
最後2つのインスタンス宣言の間で"Duplicate instance declarations" エラーが発生してしまいます
これは型aがOldAとUsefulFoo両方のクラスのインスタンスである場合どちらのnewHogeを実行すればいいのか区別がつかないからですが
実用上このケースは無意味で意図してコードを書かなければ起こり得ません
OldAとUsefulFooの両方のインスタンスになるような型が存在しないことをghcに伝えられればエラーにしなくても良いと思うのですがそのようなテクニックや言語拡張はあるのでしょうか
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
class OldA a where
hoge :: a -> a
class NewA a where
newHoge :: a -> a
class UsefulFoo a where
us :: a -> a
ef :: a -> a
ul :: a -> a
instance OldA a => NewA a where
newHoge = hoge
instance UsefulFoo a => NewA a where
newHoge = us . ef . ul
問題の本質を以下の単純化したコードで例示します
最後2つのインスタンス宣言の間で"Duplicate instance declarations" エラーが発生してしまいます
これは型aがOldAとUsefulFoo両方のクラスのインスタンスである場合どちらのnewHogeを実行すればいいのか区別がつかないからですが
実用上このケースは無意味で意図してコードを書かなければ起こり得ません
OldAとUsefulFooの両方のインスタンスになるような型が存在しないことをghcに伝えられればエラーにしなくても良いと思うのですがそのようなテクニックや言語拡張はあるのでしょうか
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
class OldA a where
hoge :: a -> a
class NewA a where
newHoge :: a -> a
class UsefulFoo a where
us :: a -> a
ef :: a -> a
ul :: a -> a
instance OldA a => NewA a where
newHoge = hoge
instance UsefulFoo a => NewA a where
newHoge = us . ef . ul
180デフォルトの名無しさん
2017/02/23(木) 00:49:33.52ID:9wlFqT9C 諦メロン
181デフォルトの名無しさん
2017/02/23(木) 06:24:32.19ID:1D9YdnQF >>178
最近はRustに御執心の様子
最近はRustに御執心の様子
182デフォルトの名無しさん
2017/02/24(金) 02:19:21.58ID:bZ+UJBqj >>179
OldAとUsefulFooとNewAの設計方針が間違っていたのでは?
OldAとUsefulFooとNewAの設計方針が間違っていたのでは?
183デフォルトの名無しさん
2017/02/24(金) 11:52:40.03ID:e/BP7pNw 最新のGHCは簡単な余再帰が末尾再帰に変換されて最適化かかるの?
184デフォルトの名無しさん
2017/02/25(土) 01:04:24.08ID:wcM+rtIC185デフォルトの名無しさん
2017/02/25(土) 06:14:09.47ID:rUogqkUr これがアスペか
186デフォルトの名無しさん
2017/02/25(土) 06:24:01.20ID:E4CT8R9/ fib_mem :: Int -> Integer
fib_mem = (map fib [0..] !!)
where
fib 0 = 1
fib 1 = 1
fib n = fib_mem (n-2) + fib_mem (n-1)
https://www.packtpub.com/mapt/book/Application%20Development/9781786464217/1/ch01lvl1sec09/Memoization+and+CAFs
フィボナッチは前スレのこれが美しすぎた。
これを見た後では
zipWithのフィボナッチとか完全に霞んで見える。
fib_mem = (map fib [0..] !!)
where
fib 0 = 1
fib 1 = 1
fib n = fib_mem (n-2) + fib_mem (n-1)
https://www.packtpub.com/mapt/book/Application%20Development/9781786464217/1/ch01lvl1sec09/Memoization+and+CAFs
フィボナッチは前スレのこれが美しすぎた。
これを見た後では
zipWithのフィボナッチとか完全に霞んで見える。
187デフォルトの名無しさん
2017/02/25(土) 11:33:38.62ID:J8MTJSeU 数式に近いから美しいって言ってるのかもしれないけど
それは
fib_mem :: Int -> Integer
fib_mem x = _fibs !! x
_fibs = map _fib [0..]
_fib 0 = 1
_fib 1 = 1
_fib n = fib_mem (n-2) + fib_mem (n-1)
みたいに一時データがユニークになるって話だから
メモ化されるって言ってもO(n^2)だけどな
それは
fib_mem :: Int -> Integer
fib_mem x = _fibs !! x
_fibs = map _fib [0..]
_fib 0 = 1
_fib 1 = 1
_fib n = fib_mem (n-2) + fib_mem (n-1)
みたいに一時データがユニークになるって話だから
メモ化されるって言ってもO(n^2)だけどな
188デフォルトの名無しさん
2017/02/25(土) 12:20:37.16ID:5RveVCtH こんな所で感動しちゃってどうするの
そういうのは万策尽きて神頼みするような時だけいい
数学に感情は不要
そういうのは万策尽きて神頼みするような時だけいい
数学に感情は不要
189デフォルトの名無しさん
2017/02/25(土) 18:51:36.03ID:A0aZ5Z9S 初歩的なメモ化で感動できた頃の心の輝きは大切にしていきたい
190デフォルトの名無しさん
2017/02/25(土) 18:58:12.64ID:A0aZ5Z9S メモ化してトップダウンするより足していってボトムアップの要領の良さが勝つ回
191デフォルトの名無しさん
2017/02/26(日) 22:44:13.60ID:+sRU0DuI stack new して作ったプロジェクトでライブラリを作りました。
(cabal ファイルに executable の代わりに library の項目を書いた)
stack build して正しくビルドされたことを確認してから stack install しました。
この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、
どうすればよいのでしょうか。
(cabal ファイルに executable の代わりに library の項目を書いた)
stack build して正しくビルドされたことを確認してから stack install しました。
この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、
どうすればよいのでしょうか。
192デフォルトの名無しさん
2017/02/27(月) 10:48:09.56ID:TbO8J9W/ stack.yamlのpackagesから設定できるよ、stack installはしなくて良い https://docs.haskellstack.org/en/stable/yaml_configuration/
193デフォルトの名無しさん
2017/02/27(月) 22:42:50.07ID:6zX/SjR0194デフォルトの名無しさん
2017/03/01(水) 13:33:54.14ID:5kGyNHm4 諸君、議論したまえ
195デフォルトの名無しさん
2017/03/02(木) 08:35:24.25ID:jHvj97KG196デフォルトの名無しさん
2017/03/06(月) 19:44:44.66ID:BYkqMHF2 新しく出たHaskell本の感想クレクレ
197デフォルトの名無しさん
2017/03/06(月) 20:21:59.21ID:j+wBUtqM 前書きだけ立ち読みしたけど
あれ関数プログラミング入門を書き直したものなんだな
あれ関数プログラミング入門を書き直したものなんだな
198デフォルトの名無しさん
2017/03/06(月) 20:28:33.59ID:MHxEW6Wj 古い方持ってたら不要なのね
199デフォルトの名無しさん
2017/03/06(月) 23:01:20.41ID:WL27y1mu マジかよ危うく買うところだった
200デフォルトの名無しさん
2017/03/07(火) 00:14:37.81ID:+xePePxn かなり書き直してるよ
201デフォルトの名無しさん
2017/03/07(火) 10:44:02.94ID:mr++RUpk Bird氏の本の第三版か。
あの人、Functional Programmingの大御所なんだね。
すごいHやGraham氏、その他日本人著者の書いたのをいろいろ読んだけど、
コアな部分を理解するならBird氏の本だと思った。
翻訳第二版のファンシーな表紙をやめて、
原著の表紙の虎を持ってきたのは何かあったのだろうか?ww
あの人、Functional Programmingの大御所なんだね。
すごいHやGraham氏、その他日本人著者の書いたのをいろいろ読んだけど、
コアな部分を理解するならBird氏の本だと思った。
翻訳第二版のファンシーな表紙をやめて、
原著の表紙の虎を持ってきたのは何かあったのだろうか?ww
202デフォルトの名無しさん
2017/03/07(火) 13:07:01.84ID:H+HmLSCA >>201
コアと言うのは、例えばどんな部分?
コアと言うのは、例えばどんな部分?
203デフォルトの名無しさん
2017/03/07(火) 13:38:15.87ID:fYd9KAIw と思ったらそもそも関数プログラミング入門買ってなかったのでこれを機会に買おう
204デフォルトの名無しさん
2017/03/07(火) 17:44:15.63ID:rdG5C9r5 kinkyな表紙にしてくれ
205デフォルトの名無しさん
2017/03/07(火) 17:49:10.46ID:mr++RUpk >202
最初から正格、非正格を念頭に置いた上で議論が進んでいく。その時点で既に毛色が違う。
豆知識として、リスト内包表記とdo構文の<-の関係も載ってた。
証明問題が多く、数学がわかんないときつい感じ。
最初から正格、非正格を念頭に置いた上で議論が進んでいく。その時点で既に毛色が違う。
豆知識として、リスト内包表記とdo構文の<-の関係も載ってた。
証明問題が多く、数学がわかんないときつい感じ。
206デフォルトの名無しさん
2017/03/07(火) 20:23:58.44ID:36OrCepo207デフォルトの名無しさん
2017/03/08(水) 06:06:40.10ID:XWjfITmE208デフォルトの名無しさん
2017/03/08(水) 06:44:38.74ID:KZ+JXzQR 今更すぎる
和訳で知ったのに原文貼って物知り顔するな
和訳で知ったのに原文貼って物知り顔するな
209デフォルトの名無しさん
2017/03/08(水) 12:31:57.39ID:RBmx3E25 >>207
週末に人気のあるプログラミング言語(StackOverflow調べ)
https://developers.srad.jp/story/17/02/09/0354232/
週末にいちばん多く使われるプログラミング言語は?
http://postd.cc/what-programming-languages-weekends/
週末に人気のあるプログラミング言語(StackOverflow調べ)
https://developers.srad.jp/story/17/02/09/0354232/
週末にいちばん多く使われるプログラミング言語は?
http://postd.cc/what-programming-languages-weekends/
210デフォルトの名無しさん
2017/03/11(土) 21:23:14.84ID:uo9d8gfu Haskellにも依存型があと数年以内に組み込まれるらしいですが、使用目的は専ら型安全性を得るためなのでしょうか?
211デフォルトの名無しさん
2017/03/11(土) 23:30:29.33ID:UHyrmxcZ 定理証明支援系はいつですか?
212resumi
2017/03/12(日) 01:08:56.73ID:f0Kjw9v5213デフォルトの名無しさん
2017/03/12(日) 01:54:17.97ID:kqHBJY7y 見てないけどグロ
214デフォルトの名無しさん
2017/03/12(日) 22:59:29.77ID:fpOKmvSG 最新のGHCだと余再帰が可能な限り自動で末尾再帰に変換されて最適化がかかるって聞いたんですけど本当すか?
215デフォルトの名無しさん
2017/03/13(月) 08:05:36.75ID:0mFH2buk tanakhに訊け
216デフォルトの名無しさん
2017/03/13(月) 10:55:02.44ID:dlgNAjv1 tanakhとかうざ
217デフォルトの名無しさん
2017/03/14(火) 22:01:52.58ID:EYcQAf3p Data.Setをモナドにしたい場合はどうしてますか?
GADTsを使ったものと
https://wiki.cse.unsw.edu.au/cs4181/13s2/Schedule?action=AttachFile&do=get&target=thum460.pdf
type familyを使ったものと
https://hackage.haskell.org/package/constrained-categories-0.3.0.1/docs/Control-Monad-Constrained.html#g:1
もしくはそれ以外にも方法はあるのでしょうか
GADTsを使ったものと
https://wiki.cse.unsw.edu.au/cs4181/13s2/Schedule?action=AttachFile&do=get&target=thum460.pdf
type familyを使ったものと
https://hackage.haskell.org/package/constrained-categories-0.3.0.1/docs/Control-Monad-Constrained.html#g:1
もしくはそれ以外にも方法はあるのでしょうか
218デフォルトの名無しさん
2017/03/16(木) 21:36:03.95ID:4z74DpyU 使う型がInt32なら32を、Int64なら64をコンパイル時に決定してソースコードに埋め込むメタプログラミングな関数を書くにはどうしますか?
219デフォルトの名無しさん
2017/03/16(木) 22:28:40.43ID:4z74DpyU Int に 対する read が遅くて困っています。
80万個のInt型をreadするのに、10^9付近の整数ばかりの場合と、1とか10とか小さな整数ばかりの場合とで 2 倍も処理時間が違ってきます。(2秒が4秒です!)
もっと速く読み込む方法はありませんか?
(但し標準入力からとします)
80万個のInt型をreadするのに、10^9付近の整数ばかりの場合と、1とか10とか小さな整数ばかりの場合とで 2 倍も処理時間が違ってきます。(2秒が4秒です!)
もっと速く読み込む方法はありませんか?
(但し標準入力からとします)
220デフォルトの名無しさん
2017/03/16(木) 23:18:00.86ID:xmljzEMX readInt
221デフォルトの名無しさん
2017/03/16(木) 23:20:30.52ID:xmljzEMX ByteStringのreadInt
222デフォルトの名無しさん
2017/03/16(木) 23:21:15.32ID:xmljzEMX readIntegerだった
うろ覚えだったすまん
うろ覚えだったすまん
223デフォルトの名無しさん
2017/03/17(金) 00:45:32.34ID:gNJfFjGV224デフォルトの名無しさん
2017/03/17(金) 00:46:54.92ID:gNJfFjGV これは全然メタじゃない
225デフォルトの名無しさん
2017/03/18(土) 18:18:35.73ID:bH58Sv6/ >>221
ありがとうございます。10倍速く動くようになりました
ありがとうございます。10倍速く動くようになりました
226デフォルトの名無しさん
2017/03/18(土) 19:37:41.00ID:bH58Sv6/ ひょっとして、foldl か foldl' かよりも、そこに渡す二項関数の方を正格にするか遅延のまま
かが速度に関わっているのでしょうか?
※二項関数は(+)やmaxのように単純であるとする
かが速度に関わっているのでしょうか?
※二項関数は(+)やmaxのように単純であるとする
227デフォルトの名無しさん
2017/03/19(日) 04:00:42.66ID:o/zGHEH2 ん、何言ってんだ。二項関数の問題じゃなくて二項関数に渡す『二つの引数が今すぐどちらも値まで評価されるかどうか』が問題なのか。
される場合、foldl'の方がサンクなしの省メモリ(定数空間?)で処理が進むのか。
foldl'で正格に評価するといってもWHNFで止まるんですもんね
サンクが要らないからその部分(サンクの作成と破棄)のオーバーヘッドがなくなってちょっとだけ速くなるのか。でもあくまで foldl' の利点は省メモリの方か
される場合、foldl'の方がサンクなしの省メモリ(定数空間?)で処理が進むのか。
foldl'で正格に評価するといってもWHNFで止まるんですもんね
サンクが要らないからその部分(サンクの作成と破棄)のオーバーヘッドがなくなってちょっとだけ速くなるのか。でもあくまで foldl' の利点は省メモリの方か
228デフォルトの名無しさん
2017/03/19(日) 10:06:06.54ID:awlj00/Y229デフォルトの名無しさん
2017/03/19(日) 10:30:10.95ID:fNC16+Hl 速度の比較をしたいならまずプロファイルを取りなさい
230デフォルトの名無しさん
2017/03/19(日) 14:43:43.30ID:qjqnp6Y8 V8エンジンで無茶苦茶速くなったことだし、もうTypeScriptでいいやと思うようになった。
231デフォルトの名無しさん
2017/03/20(月) 20:37:53.08ID:H6ds3WUf 教えてください
何らかの型の巨大データがメモリ内にあったとして、データが用済みになった時に手動で解放する方法がHaskellにありますか?
そもそもそういう発想が間違いかも?
何らかの型の巨大データがメモリ内にあったとして、データが用済みになった時に手動で解放する方法がHaskellにありますか?
そもそもそういう発想が間違いかも?
232デフォルトの名無しさん
2017/03/20(月) 22:25:28.88ID:THpWaU1J mark&sweepいらないなと思った時に参照カウントに変更する方法
言語を変えなくてもコンパイラを変えるだけでできそう(できたとは言ってない)
言語を変えなくてもコンパイラを変えるだけでできそう(できたとは言ってない)
233デフォルトの名無しさん
2017/03/20(月) 22:42:41.03ID:tOiVLltG >>231
用済みになった時に手動で解放というのが、
1) たとえどこかから参照されていようが強制的に解放する
2) 参照がなく解放できる時にスケジューリングを待たずにGCを強制する
どちらの意味なのか分からん。
前者のつもりなら、たしか方法はなかったような気がする。
この発想は間違っていると思う。
自分が仕込んだメモリリークの問題を隠しているだけ。
後者なら、base パッケージの Systwm.Mem モジュールを調べてみて。
これなら分かる。
例えばゲームで、できるだけステージ途中で時間かかかるGCが起動しないように、
ステージ開始直前に強制的にGCさせたい、とか。
用済みになった時に手動で解放というのが、
1) たとえどこかから参照されていようが強制的に解放する
2) 参照がなく解放できる時にスケジューリングを待たずにGCを強制する
どちらの意味なのか分からん。
前者のつもりなら、たしか方法はなかったような気がする。
この発想は間違っていると思う。
自分が仕込んだメモリリークの問題を隠しているだけ。
後者なら、base パッケージの Systwm.Mem モジュールを調べてみて。
これなら分かる。
例えばゲームで、できるだけステージ途中で時間かかかるGCが起動しないように、
ステージ開始直前に強制的にGCさせたい、とか。
234デフォルトの名無しさん
2017/03/20(月) 22:58:59.79ID:H6ds3WUf >>233
ありがとう。質問してよかった。
こちらのイメージ的にはCで言うところのfreeで1)が近いと思うが、GCを強制する
発想がそもそもなかったです
断続的にでかいデータを扱うので、次のロードまでにメモリを解放しておく必要
がありまして。
Systwm.Memを調べてみます。
ありがとう。質問してよかった。
こちらのイメージ的にはCで言うところのfreeで1)が近いと思うが、GCを強制する
発想がそもそもなかったです
断続的にでかいデータを扱うので、次のロードまでにメモリを解放しておく必要
がありまして。
Systwm.Memを調べてみます。
235デフォルトの名無しさん
2017/03/21(火) 07:16:46.72ID:RPjo5BAn 演算子の部分適用の書き方で
演算子との間にスペースを書かないのはHaskellの作法?
(+ 3) (3 +) じゃなく (+3) (3+) って書くじゃんみんな
演算子との間にスペースを書かないのはHaskellの作法?
(+ 3) (3 +) じゃなく (+3) (3+) って書くじゃんみんな
236デフォルトの名無しさん
2017/03/21(火) 09:36:45.55ID:bH1u/9cj みんなそうしてるから真似してそうしてるだけだろ。
わからないことは調べるのはめんどくさいから真似しておこうとか思ってそう。
わからないことは調べるのはめんどくさいから真似しておこうとか思ってそう。
237デフォルトの名無しさん
2017/03/21(火) 13:49:23.04ID:L0SduR/f >>235
普通に2項演算子として用いている場合は項と演算子とが独立してる感があるが、
部分適用した場合は「3を加える関数」という一塊の概念というイメージが強い
なんとなくだけどそんな使い分けではないかと思ってる
普通に2項演算子として用いている場合は項と演算子とが独立してる感があるが、
部分適用した場合は「3を加える関数」という一塊の概念というイメージが強い
なんとなくだけどそんな使い分けではないかと思ってる
238デフォルトの名無しさん
2017/03/21(火) 13:55:43.06ID:TPAad80u GUIには等幅ではないフォントがあるから
1ピクセル単位でスペースを描く作法とかありそう
1ピクセル単位でスペースを描く作法とかありそう
239デフォルトの名無しさん
2017/03/21(火) 14:18:51.18ID:kbUhzU5T Lispの関数 1+ とかの影響でない?
240デフォルトの名無しさん
2017/03/21(火) 14:46:18.79ID:LpaugWCV 逆にHaskellでだけスペース挟んだりしたくないだろ
241デフォルトの名無しさん
2017/03/21(火) 19:57:22.30ID:zopuGVTD 人間は文章を読むのに時間がかかる筈なので、質問と同時にGCを強制発動して、ユーザが質問を理解し返答を入力するまでの間にGCを終えたい
242デフォルトの名無しさん
2017/04/02(日) 18:01:47.89ID:HoO7tpUE 「関数プログラミングの思考法」で勉強してるんですが
「たのしく学ぼう!」は楽しく理解できる内容で
こちらは余計な表現は省いている硬派な文体ですね。
そのため反ってサクサク理解していけるのですが
皆さんどうでしょうか。
「たのしく学ぼう!」は楽しく理解できる内容で
こちらは余計な表現は省いている硬派な文体ですね。
そのため反ってサクサク理解していけるのですが
皆さんどうでしょうか。
243デフォルトの名無しさん
2017/04/02(日) 19:10:13.29ID:y9d2jD+G >>242
分かる。ノイズが多い本は理解を妨げる面があるよな。
分かる。ノイズが多い本は理解を妨げる面があるよな。
244デフォルトの名無しさん
2017/04/02(日) 19:17:33.68ID:W6VXUIjv ノイズが多い本……land of lispかな?
245デフォルトの名無しさん
2017/04/03(月) 17:43:18.72ID:n+rAkf5b 軽妙な喩えならいいんだがセンスない人がやると惨憺コース
246デフォルトの名無しさん
2017/04/03(月) 18:24:45.70ID:Qx3jr0sY H本に影響を受けて書かれたE本はセンスないし痛々しいしで読むのが辛かった
変な色気出して慣れないことをしないでくれ
変な色気出して慣れないことをしないでくれ
247デフォルトの名無しさん
2017/04/03(月) 20:16:55.66ID:uUmwarja >>244
Land of Lisp は何故か許せる
Land of Lisp は何故か許せる
248デフォルトの名無しさん
2017/04/03(月) 22:01:45.88ID:cuuaF505 ノイズじゃなくて冗長性だろ。
冗長性が多いほど失った記憶を復元しやすいから覚えやすいんだぞ。
そんなことも知らないのか馬鹿だなぁ。
冗長性が多いほど失った記憶を復元しやすいから覚えやすいんだぞ。
そんなことも知らないのか馬鹿だなぁ。
249デフォルトの名無しさん
2017/04/03(月) 22:37:33.25ID:uw3ZIsiG 暗記法かな?
250デフォルトの名無しさん
2017/04/04(火) 01:02:45.85ID:Zl9hd3NS ラノベじゃないんだ。インクと紙の無駄遣いは止してくれ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 外国人の犯罪率は日本人の1.72倍 警察庁が短期滞在者除いた数字を参院内閣委で答弁★2 [七波羅探題★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★11 [樽悶★]
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- ひろゆき氏 高市首相の台湾有事発言 「日本が得たものあまりない。経済的なマイナスは明確に存在」 [冬月記者★]
- Redditの外国人たち、なぜか日本の江戸時代の『五人組』システムに興味津々。めっちゃ↑付いてるのに日本人の俺が知らない😰 [718678614]
- 【画像】安倍乙 [718678614]
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【悲報】高市政権、ホタテ輸出の支援検討 [834922174]
- 【悲報】立憲岡田「間違った答弁をした高市総理に問題がある」→愛国者ブチギレ炎上 [834922174]
