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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 23:43:54.28 ID:Vh4eztBk.net]
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
echo.2ch.net/test/read.cgi/tech/1428597032/

101 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 17:56:57.37 ID:UXwydrfk.net]
またワードサラダボットが稼働を始めたか

102 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 18:22:05.14 ID:C6fGSB5S.net]
初心者じゃなくなってもなんでもかんでもググってる俺
カン拡張って何?ふむふむわからん

103 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 18:27:07.04 ID:v0ndbkEe.net]
Kan拡張?
聞いた瞬間分かるわ圏論由来ってwww
圏論の本読め

104 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 19:57:57.60 ID:M7LFtYkC.net]
リンシャンカイホウ?

105 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 20:05:04.51 ID:Iw+tyvVU.net]
紙の本がなくなったら本を読むのもインストールで挫折する時代が来るかも

106 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 23:20:45.84 ID:9/lBQk1n.net]
俺の部屋にはインストールで挫折した本が積み重なっている

107 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 14:17:32.23 ID:TDpThq2o.net]
ネタバレはズルという思想があるよね
タダで教えてもらえるネタバレを全部理解してから本を買うという発想ができない

108 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 22:41:58.34 ID:TdsB4n5F.net]
FIT(Framework for Integrated Test)
fit.c2.com/

これの Haskell 実装にチャレンジしてる人いる?
そんな人のブログやHP知らない?

試しに GitHub を探してみたけど、見当たらない感じ。

109 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 22:42:57.06 ID:Whb3/S6q.net]
俺も龍を捨てて玉を詰むという勇気が出ない



110 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 12:52:47.67 ID:Ld2MqDtI.net]
Haskell obj

111 名前:ectiveってどうなったの?
やっぱダメだった?
[]
[ここ壊れてます]

112 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 14:32:11.26 ID:CcXtgB5F.net]
>>110
これか?

https://hackage.haskell.org/package/objective

Haskell objectiveでググると最初に出てくる

113 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 14:44:23.19 ID:Ld2MqDtI.net]
使いやすさ的にどうだったのかなって。
作ったの日本人っぽいけど

114 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 15:50:30.09 ID:CcXtgB5F.net]
>>111

Haskellでの合成可能なオブジェクトの構成とその応用
https://fumieval.github.io/papers/ja/2015-Haskell-objects.pdf
>この章では、本稿で提案するオブジェクトの定義やその性質について説明する。なお、これから
>示すオブジェクトや関連する構造は、公開している objective パッケージ 1 に格納されている。

> 1 hackage.haskell.org/package/objective

115 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 01:03:40.92 ID:E7OnquDd.net]
functor分からんとHaskellは使えないの?

116 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 03:27:27.73 ID:lPz/aekC.net]
凄いHを一通りやって、今はReal world haskellやってる途中
設計関連がまだよく分かってないな
モナド変換子とか非同期関連もよく分かってないや
関数型の勉強で始めたけど中々難しい
言語としては今の所簡潔で好きではある、ってか他言語の括弧がキモく見えてきた

117 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 09:54:44.42 ID:8j/X+nWQ.net]
オフサイドルールには賛否両論ある

118 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 04:29:48.20 ID:SonJzAjc.net]
>>114
んな事ない。
と言うか、昔はファンクタ自体無かった。
モナドあるならファンクタも入れろや的な。
モナドも、使うぶんにはいつの間にか使ってる感じ。

モナドとは何か?とか考えると難しいけど、まあモナドもファンクタも型の一種。
そう言う特性の関数や演算子を使うための。
言わば、処理の流れにも型があるとでも思ってくれ。

119 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 08:20:37.05 ID:CYxwUQWJ.net]
>>114
実際的に重要なのはFunctorというよりも(そのインターフェースの)fmapの理解かな
多分よく出会うのはListのmapだけど、まずはこいつを使いこなせるようになれば
Haskellらしい、関数型らしい書き方ができるようになってくると思う



120 名前:デフォルトの名無しさん [2017/02/09(木) 08:31:16.17 ID:/fB7Lbok.net]
fmapとmapの名付けは解せない

121 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 08:58:32.86 ID:UTxumv29.net]
モナド則は
型と関数と関数合成が満たすべきルール。
ただし自作モナドがモナド則を満たすことを保証する機構はない。

122 名前:デフォルトの名無しさん mailto:sage [2017/02/10(金) 15:45:40.33 ID:5JASqTbe.net]
fromIntegralに短縮名つけるのが癖の人っている?
fI = fromIntegral 的な

123 名前:デフォルトの名無しさん mailto:sage [2017/02/10(金) 18:50:22.57 ID:xMx0FpSS.net]
長くなるならletで別行で定義する

124 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 23:22:07.65 ID:8gjNJV43.net]
メッセージングシステムを主なアーキテクチャとしているアプリケーションにおいて、
そのメッセージの種類を増やすことでアプリケーションの機能を拡張する際に、
コンパイルすべきモジュールの数を最小限に抑える方法を探しています。

メッセージングシステムというと大げさかもしれませんが、
たとえば Win32API のウィンドウメッセージのようなものを想像してください。

モジュールAとモジュールM、およびモジュールTがあるとします。
モジュールTの中ではMsg型が定義されいます。

data Msg = MsgX String Int | MsgY [Double]

また、モジュールTはモジュールAとモジュールMの両方からインポートされています。

モジュールMの関数はモジュールAの関数を呼び、モジュールAの関数は型Msgの値を返します。
モジュールMの関数はMsgXが帰ってきた場合と、MsgYが帰ってきた場合とでその後の処理を変えています。

ここで、このアプリケーション機能を拡張しようと、Msg型にデータコンストラクタMsgZを追加しました。
そして、MsgZを返す関数を持つモジュールBを新たに作りました(もちろんモジュールTをインポートしています)。

ただし、既存のモジュールAは何も変更していません。

しかしそれでも、これをビルドする際にはモジュールAの再コンパイルが必要です。
インポートしている、つまり依存しているモジュールTが更新されたからです。

このような単純なメッセージングシステムの作りだと、どうしてもアプリケーションを拡張する際にモジュールTの更新が伴い、
それによって、変更していない多くのモジュールの再コンパイルが必要になります。

かといって極端な話、メッセージや付随するデータを ByteString 型にシリアライズすれば再コンパイルの問題は解決しますが、
今度は型の不一致や未定義メッセージなどのバグがコンパイル時に発見できなくなり、それもマズいです。

厳格な型システムの恩恵にあずかりながら、かつ不要な再コンパイルを抑えるようなメッセージングシステムの構築方法はないでしょうか。

125 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 13:50:57.94 ID:EOfitV0o.net]
javaですら良く分からんやつに
haskellのモナドなど分かるはずも無く

126 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 15:45:54.11 ID:+1FsHT8L.net]
ポインタ理解するときもモナド理解するときも小1で自転車補助輪外す時もみんな同じ

127 名前:エ覚だった気がする
学習は滴定曲線のように、『気づいたら知って』いた
[]
[ここ壊れてます]

128 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 16:10:07.24 ID:QGOwrBDz.net]
たいていの概念は名前も説明も勿体つけてるが実はたいしたことはない
さらに最悪なのは長々と理屈ついている割に扱いは他の概念と変わらないやつだ
そういうのを世間では屁理屈という

129 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 17:52:39.61 ID:C9OkM4dT.net]
西尾維新批判はやめろ



130 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 21:33:24.01 ID:hoDvKKnX.net]
アベノミクスとか新常態とかもそうだよね

131 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 22:25:13.91 ID:cs8Gyxec.net]
haskellの本が出るみたいだから買ってみよう

132 名前:デフォルトの名無しさん mailto:sage [2017/02/12(日) 23:59:55.00 ID:t7tEKqZ9.net]
>>89の二冊か

133 名前:デフォルトの名無しさん [2017/02/14(火) 00:10:05.79 ID:haBe4Sdm.net]
お前らってこういうのチェックしてたりするの?

Haskell News
haskellnews.org/grouped

134 名前:デフォルトの名無しさん mailto:sage [2017/02/14(火) 07:07:04.56 ID:0/yLOI7Z.net]
そもそもfoldはループより速い?

135 名前:デフォルトの名無しさん mailto:sage [2017/02/14(火) 10:36:57.61 ID:CVjuh2pk.net]
>>132
Haskellにはループ構文はありません。
一体何と比較した話でしょうか?

136 名前:デフォルトの名無しさん mailto:sage [2017/02/14(火) 16:50:38.39 ID:m6BuE6wx.net]
>>133
C

137 名前:デフォルトの名無しさん mailto:sage [2017/02/14(火) 21:33:40.60 ID:jOgsWiWm.net]
>>134
Haskellの中で複数のアルゴリズムの比較はできますが、
C言語のforループとの速度の比較はできません。

138 名前:デフォルトの名無しさん mailto:sage [2017/02/14(火) 23:12:33.60 ID:Bh34MboJ.net]
バイナリを吐かせて逆汗すれば比較できるんでないの?
つっても多くの関数呼び出しはインライン展開されるんだろうが

139 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 05:29:57.20 ID:De10g5Ib.net]
>>132
データ構造やコンパイラによる。
Haskellは基本リストなのでアドレスが連続してるとは限らない。
Cだと同じ処理を配列に施す様なループはSIMD命令に変換される。
Haskellはそう言う命令に変換する為のデータ構造使う。
(データの連続性を保証するためにもデータ構造が別なのだと思う)

IntelC++コンパイラとかだと最新のSIMD命令に対応してる。
gcc程度まではHaskellでも書き方次第では追い付けるだろうけど、CPUメーカー謹製の最新CPU対応コンパイラにまでは勝てない。

入門書レベルではHaskellはCに勝てないけど、いかなる並列・並行処理も否定してない。



140 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 06:42:21.88 ID:+7DpWr8H.net]
そもそもHaskellのfoldとCのforループとでは、
速度を比較するための条件をそろえる事ができません。

たとえばプロセスを立ち上げてから処理し終えるまでの時間、
このレベルであればHaskellとCの比較に意味はあります。
実行環境という条件を同一にできるからです。
(ちなみに、この場合はCの方をHaskellより速くすることができます)

一方HaskellのfoldとCのforというレベルでは、まず計算するために入力するデータが違います。
foldの入力データ型はリスト(Foldableのインスタンス)ですが、同じものをCで再現できますか?
入力データをそろえなければ「関数程度のレベルの比較」に意味はありません。

141 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 07:03:08.40 ID:mu4JLPUi.net]
扱うモナドがファンクタのとき
return . f =<< m

f <$> m
とシンプルに置き換え可能なのですね

142 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 10:15:38.52 ID:JnBGC/9x.net]
何年か様子見してたけどやっぱり流行らんな
難しいから底辺には普及しないはわかるが
だったら上位の連中は食いつくかと言えばそんなことはなかった

143 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 11:05:35.10 ID:3lGP54OB.net]
難いのに普及したC

144 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 11:41:14.45 ID:1S7+uRG8.net]
C以前の言語がひどすぎたんだ

145 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 13:18:52.67 ID:jktpXUxB.net]
えっ、Modula-2とかCより読み易くて
低レベルのシステム記述も出来たのに
全然普及せんかったでw

政治的理由と思うが突然Turbo Modula-2
の販売が中止になってTurbo-C出たけどね。

146 名前:デフォルトの名無しさん mailto:sage [2017/02/15(水) 17:36:32.27 ID:kkhdLQ6B.net]
出た! 陰謀論!

147 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 00:44:11.97 ID:PsfAYoHu.net]
流行り廃りに合理的な理由なんてない。

148 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 04:02:18.89 ID:zxmzXW5F.net]
普及言語からHaskellに乗り換えに難しく感じる部分

・do記法は関数で構成されるという関数型プログラミングの理解のための学習の邪魔をする(混乱させる)
・型を気にせず書けるスクリプト言語からだと強力すぎる型推論のおかげで型があるという感覚になじめず型に関するエラーでイラ立つ
・C言語系からだとreturnがreturn構文じゃない、if-elseが式である
・イミュータブルしかない、再代入が出来ない、(ように感じ)思うようにコード書けず辛い
・Haskellについて語る書の書き方や視点が数学寄りのものが多く理解が難しい(奴らが言うようなこまけえ数学っぽいこと気にせんでもコードは書けるっちゅうに純粋さにこだわりすぎ)

149 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 15:22:31.85 ID:VWTLMYuE.net]
そもそもハスケルの強みって何?
計算時間ではビジュアルスタジオに遠く及ばないだろ?
描画とか数学的処理も他の高級言語使った方がよくね?



150 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 16:47:16.10 ID:fRybmYDX.net]
仕様記述言語の強み
自分が強くなるために右往左往するよりも
強くなりたいならああしろこうしろと指図して右往左往させる側

151 名前:デフォルトの名無しさん [2017/02/16(木) 18:17:34.39 ID:VWTLMYuE.net]
右往左往の意味がよく分からんが、自分が考えて手を動かす量が減るということかな?

152 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 19:16:01.32 ID:9Ohg+UxU.net]
Haskellでゲーム作りたいです!

153 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 20:28:16.21 ID:qwVWj3LU.net]
言語仕様はともかく実行環境がおそ松すぎる

154 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 21:04:48.77 ID:lgZA8NJM.net]
>>151
どのような意味で言っているのかよく分かりません。
もう少し詳しく説明していただけないでしょうか。

155 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 08:05:51.13 ID:nCBINic8.net]
>>151
腐女子なの?

156 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 08:37:50.87 ID:iKIs1hpk.net]
遅いと言われようと、フィボナッチ数列をzipWithで1行で書ける言語というところに魅力を感じている
(そんなに何度もフィボナッチ数列を書く機会があるわけではないが表現力の一例として)

157 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 10:28:30.13 ID:nCBINic8.net]
1行フィボナッチって結構あるんだな全然知らなかった

https://wiki.haskell.org/The_Fibonacci_sequence

158 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 13:55:10.09 ID:gJ+iD/w/.net]
パスカルの三角形を出したいんだけど、
++使ってるのが気に食わないのだがうまく消せなかった
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

159 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 19:08:56.34 ID:ishbEDrB.net]
型に関数型のデータを持たせることはできますか?
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)



160 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 20:56:35.22 ID:BpdtDTW+.net]
data Hoge a = Hoge (a -> a -> a) a
これだとHoge f 0とHoge g 0の型は同じになってしまう
引数fをgに変えると戻り値の型が変わるような関数Hogeは動的言語なら作れるかも

161 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 21:34:57.67 ID:WL7YVLDK.net]
>>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)

この関数は一方だけでも無限リストだと止まらないので注意が必要ですが、
ときどき役に立つので私は自分のツールボックスに入れています。

162 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 22:22:44.78 ID:nCBINic8.net]
パスカルの三角形はロゼッタコードにあるのが限界でしょ

Pascal's triangle - Rosetta Code
https://rosettacode.org/wiki/Pascal%27s_triangle#Haskell

163 名前:デフォルトの名無しさん mailto:sage [2017/02/18(土) 01:35:58.15 ID:4ADoOqjk.net]
>>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)
とほぼ同じ

164 名前:デフォルトの名無しさん mailto:sage [2017/02/18(土) 12:34:28.15 ID:OQ3VgdS2.net]
++をネタにする作者の気持ちをスルーしてパスカルの三角形を熱く語る
理系の鑑

165 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 07:14:56.06 ID:rxEXn9HF.net]
pascal = map (takeWhile (/= 0)) $ iterate (\xs -> 1 : zipWith (+) xs (tail xs)) (1 : repeat 0)

melpon.org/wandbox/permlink/HLKtAXzGodOF3ZGP

166 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 10:09:57.42 ID:obWbRffz.net]
ところで・・・

コメントを読まなくても、どのように計算しているのかがぱっと見て分かる、
それが関数型が持つ高い宣言性の良いところ。

また、そのようにプログラムしても、もともとGHCが持つ優秀な最適化能力や、
プログラムの見た目を壊すことなく最適化を促すことができる仕組みのおかげで、
結果的にかなり効率の良い処理がなされる実行ファイルが出力される。
(実用的なアプリケーションで十分に耐えられる)

にも関わらず、そのメリットをあえて潰すようなプログラムをする人が稀にいるが、
純粋関数型のHaskellを使っておきながら、他に優先すべき事項があるのだろうか。

まぁ、縛りパズルをして遊んでいるのなら分かるが。

167 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 11:37:29.74 ID:TYcfVj75.net]
今ここで言う必要のないものを必要と思い込むことも縛りのパターンの一つ

168 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 18:51:42.32 ID:rxEXn9HF.net]
どうしても難解になりがちはワンライナーやコードゴルフで遊ぶのは人の自由だと思うけど遊び以外で使うのはたしかにどうかと思う

169 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 19:20:27.12 ID:Mzz/1Hry.net]
ポイントフリー教も1変数のパイプみたいなやつならまだ分かるのだが
(中間変数が無くなるから効率が上がるという話もある、
そのくらいGHCが最適化してくれてもよさそうなのに)
2変数以上になると完全に暗号めいてて困る



170 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 20:52:17.90 ID:TYcfVj75.net]
xss = (1 : repeat 0) : [ zipWith (+) (0 : xs) xs | xs <- xss ]
pascal = [ takeWhile (/=0) xs | xs <- xss ]

これは2変数というか2重ループ
それと再帰のために自分自身に名前をつけた時点でポイントフリーは諦めている筈

171 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 23:43:55.15 ID:rxEXn9HF.net]
ポイントフリーって何?こういうこと?

pascal = map (takeWhile (/= 0)) $ iterate ((1 :) . map sum . transpose . take 2 . tails) (1 : repeat 0)

melpon.org/wandbox/permlink/bYSi5tfNVy5zfzPg

172 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 00:18:45.73 ID:mtupkOQi.net]
変数名かんがえたくないときポイフリできたらしちゃうことある

173 名前:デフォルトの名無しさん [2017/02/20(月) 00:20:11.39 ID:bFWxmJHr.net]
ArrowLoopの解釈はこれで合ってるの?

tamae.2ch.net/test/read.cgi/dame/1439747269/241-242n

174 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 20:56:54.49 ID:uIdMc98M.net]
ArrowLoopがどういうインターフェイスなのかいまいちよく分からないけど
その定義でどう動くかはfによるとしか・・・

175 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 22:57:03.60 ID:tib6qfwe.net]
結局ハードウェアの動きとあまりに乖離しすぎてるってのが
普及しない理由じゃないかと。

176 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 04:45:41.06 ID:bkUsfADx.net]
量子コンピュータが普及する時は言語どうなるんかな
CPUに合わせた新しい言語になるのか、今の言語をベースにコンパイラに任せるのか
原理とか全く知らなくて言ってるけど

177 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 11:55:34.70 ID:hz5m2IGZ.net]
メモリとCPUが分離しすぎているおかげでメモリ上のデータ構造に変化がない
OOPははそこを変えようとしたのか
分離するのやめれば破壊的イノベーションが起きるのではと

178 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 19:46:11.18 ID:CLRDv6M0.net]
ほんとぉ?

179 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 22:11:08.30 ID:3rYbm5Zu.net]
golangはOOPとは違うような



180 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 01:32:49.98 ID:doFig/5A.net]
tanakh神って色々とやられておられるのですね

hackage.haskell.org/user/HideyukiTanaka

181 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 11:25:20.39 ID:C8G0Nbdq.net]
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

182 名前:デフォルトの名無しさん [2017/02/23(木) 00:49:33.52 ID:9wlFqT9C.net]
諦メロン

183 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 06:24:32.19 ID:1D9YdnQF.net]
>>178
最近はRustに御執心の様子

184 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 02:19:21.58 ID:bZ+UJBqj.net]
>>179
OldAとUsefulFooとNewAの設計方針が間違っていたのでは?

185 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:52:40.03 ID:e/BP7pNw.net]
最新のGHCは簡単な余再帰が末尾再帰に変換されて最適化かかるの?

186 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 01:04:24.08 ID:wcM+rtIC.net]
>>182

melpon.org/wandbox/permlink/2dkmGhuBxpuIXnLU



melpon.org/wandbox/permlink/zMLvKlMSoP1i5EFb

187 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 06:14:09.47 ID:rUogqkUr.net]
これがアスペか

188 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 06:24:01.20 ID:E4CT8R9/.net]
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のフィボナッチとか完全に霞んで見える。

189 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 11:33:38.62 ID:J8MTJSeU.net]
数式に近いから美しいって言ってるのかもしれないけど
それは
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)だけどな



190 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 12:20:37.16 ID:5RveVCtH.net]
こんな所で感動しちゃってどうするの
そういうのは万策尽きて神頼みするような時だけいい
数学に感情は不要

191 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 18:51:36.03 ID:A0aZ5Z9S.net]
初歩的なメモ化で感動できた頃の心の輝きは大切にしていきたい

192 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 18:58:12.64 ID:A0aZ5Z9S.net]
メモ化してトップダウンするより足していってボトムアップの要領の良さが勝つ回

193 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 22:44:13.60 ID:+sRU0DuI.net]
stack new して作ったプロジェクトでライブラリを作りました。
(cabal ファイルに executable の代わりに library の項目を書いた)

stack build して正しくビルドされたことを確認してから stack install しました。

この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、
どうすればよいのでしょうか。

194 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 10:48:09.56 ID:TbO8J9W/.net]
stack.yamlのpackagesから設定できるよ、stack installはしなくて良い https://docs.haskellstack.org/en/stable/yaml_configuration/

195 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 22:42:50.07 ID:6zX/SjR0.net]
>>192
出来ました。
ありがとうございました。

196 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 13:33:54.14 ID:5kGyNHm4.net]
諸君、議論したまえ

197 名前:デフォルトの名無しさん [2017/03/02(木) 08:35:24.25 ID:jHvj97KG.net]
tamae.2ch.net/test/read.cgi/prog/1475046306/812n

Haskellerが現れた

198 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 19:44:44.66 ID:BYkqMHF2.net]
新しく出たHaskell本の感想クレクレ

199 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 20:21:59.21 ID:j+wBUtqM.net]
前書きだけ立ち読みしたけど
あれ関数プログラミング入門を書き直したものなんだな



200 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 20:28:33.59 ID:MHxEW6Wj.net]
古い方持ってたら不要なのね






[ 続きを読む ] / [ 携帯版 ]

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

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