X



関数型プログラミング言語Haskell Part34
0003デフォルトの名無しさん
垢版 |
2021/12/17(金) 12:58:25.90ID:NPioGyUL
30) http://mevius.2ch.net/test/read.cgi/tech/1484491434/
29) http://peace.2ch.net/test/read.cgi/tech/1436869629/
28) http://peace.2ch.net/test/read.cgi/tech/1428535861/
27) http://peace.2ch.net/test/read.cgi/tech/1420718555/
26) http://peace.2ch.net/test/read.cgi/tech/1406436392/
25) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html
0004デフォルトの名無しさん
垢版 |
2021/12/17(金) 12:58:57.67ID:NPioGyUL
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
https://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86%E3%83%83%E3%83%97

Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
https://ja.wikibooks.org/wiki/Haskell

A Gentle Introduction to Haskell, Version 98
http://www.sampou.org/haskell/tutorial-j/

Haskell のお勉強
http://www.shido.info/hs/

お気楽 Haskell プログラミング入門
http://www.nct9.ne.jp/m_hiroi/func/haskell39.html

本物のプログラマはHaskellを使う
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog
0007デフォルトの名無しさん
垢版 |
2021/12/20(月) 12:58:58.75ID:oUGNvHUz
>>6
また実名っぽいの出して荒らしてんのかあいつ
0008デフォルトの名無しさん
垢版 |
2021/12/20(月) 20:14:33.16ID:ceMzU2Ib
自分で召還しといて荒らしとかいうのやめようや。
0010デフォルトの名無しさん
垢版 |
2021/12/20(月) 20:33:12.76ID:ceMzU2Ib
Excel VBAのスレでやるのか?
0012デフォルトの名無しさん
垢版 |
2021/12/20(月) 23:17:06.32ID:ceMzU2Ib
72スレ目って。
自分では気が狂ってることがわからないんだろな。
国民を守らなければ!って使命感があふれ出して72スレ。
0014デフォルトの名無しさん
垢版 |
2021/12/21(火) 06:55:32.78ID:t7n7AMl6
a :: Int -> Int
a 0 = 50^2
a n = round (sqrt (realToFrac n):: Float)
型変換なみだでてきた
ghciプロンプトだと
round (sqrt 50)
7
ちゃんと出るじゃねーか...
0015デフォルトの名無しさん
垢版 |
2021/12/21(火) 10:17:23.12ID:WtPb4PP+
>>6
酷すぎる
0016デフォルトの名無しさん
垢版 |
2021/12/21(火) 11:09:52.33ID:+QFtbkZ1
>>14
ghci 上で :t round . sqrt として
a :: Int -> Int との違いを比べてみるとよいよ (あとリテラルの50はIntではない)
数(特に浮動小数点数)まわりの関数でなみだ出てくるのは多少同意
0017デフォルトの名無しさん
垢版 |
2021/12/21(火) 15:10:59.44ID:XC3saJz0
>>6
こ、これはもしや・・・・あの!?
0018デフォルトの名無しさん
垢版 |
2021/12/23(木) 17:28:45.18ID:iaSGtOUq
ken80297274

岡部さんのサブアカウント発見
0019デフォルトの名無しさん
垢版 |
2021/12/23(木) 20:30:31.33ID:hyDq6lCn
どんな人生を生きたら実名でこんな攻撃的な調子でtwitter上で不特定多数に絡みに行こうと思えるんだ
実際実社会で会ったらどんな感じの人なんだろう
0020デフォルトの名無しさん
垢版 |
2021/12/23(木) 21:25:57.12ID:cmpFYqPS
岡部健さんはアメリカのUCLA卒業と書いていたらしいので、情報技術の素養はあるんじゃないか?


https://twitter.com/ohagiya/status/226163166067949568


http://archive.ph/1oA1C
>>「まああれでUCLAとかよく嘘こけるよねー。 」
>とは、これも、僕が学歴詐称しているという野田憲太郎の妄想にはじまる
>「バッシングに用いる好物のネタ」であり、もちろんそのような学歴詐称の事実などないし、それも名誉毀損として刑事告訴の要件に入っている。
https://twitter.com/5chan_nel (5ch newer account)
0021デフォルトの名無しさん
垢版 |
2021/12/23(木) 21:27:02.59ID:cmpFYqPS
Twitterで

ohagiya UCLA

で検索すると岡部健さんの学歴にけちを付けてる人が出てくるね
0022デフォルトの名無しさん
垢版 |
2021/12/23(木) 23:57:52.67ID:MjSWMWRR
ハリウッド映画でよくある、酒場でのウィットに富んだ大人の会話の一種では?
0時を過ぎると、酒瓶を割って拳で語り合う・・・いまその状態では?
夜が明けると、互いを理解し絆が深まる。
そして生涯の友となるのでは?
0023デフォルトの名無しさん
垢版 |
2021/12/27(月) 09:38:29.17ID:hZ17KgJk
https://ken-okabe
.hatenablog
.com/entry/2021/12/20/134121

『結局は、あろうことか、当時のQiita運営がこういう匿名炎上目的のアカウントの思惑に乗っかる形で、僕の反論コメントを消してしまったので』

と書いてるので、当時nonstarterさんの記事のコメント欄に出没していたのは岡部健本人だったのかな。
ことあるごとに「岡部氏」って別人のように書いてたのにね
0024デフォルトの名無しさん
垢版 |
2021/12/28(火) 01:15:18.08ID:e4meyx5L
高度IT人材、富士通は最大年収3500万円へ

「富士通年収3500万!」日本のIT企業の年収も、高額化してきました

AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ

【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材

来年度から副業解禁 人材多様化へ―大同生命次期社長

副業・兼務の解禁から4年、ロート製薬流で進めるキャリア支援

ロート製薬が副業をいち早く導入した「超人間的」な理由

ロート製薬会長が「副業を受け入れない会社は発展しない」と断言する理由
0026デフォルトの名無しさん
垢版 |
2021/12/31(金) 02:20:27.03ID:aP8qPSMg
シンプルなワードカウント書いたけど関数合成でワードカウントが組めません
" ab ccc dd "を[0,1,1,0,1,1,1,0,1,1,0]みたいなリストに変換して
ワードの数は3みたいな
以下普通に書いたワードカウント
spwc4 :: [Char] -> Int
spwc4 s = wc4 s 0 0
where
wc4 :: [Char] -> Int -> Int -> Int
wc4 [] l c = (c + (if l == 0 then 0 else 1))
wc4 (x:xs) l c
| x == ' ' || x == '\t' || x == '\n' || x == '\r' = if l == 0 then wc4 xs 0 c else wc4 xs 0 (c+1)
| otherwise = wc4 xs (l+1) c


文字列を
chkspand :: Char -> Int
chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1
に与えて[0,1,1,0,0,1]みたいなリストに変換
これを関数合成でカウントすると内部状態を保持する必要で困惑中
wordcount . map chkspand $ " asas df df"
みたいな書き方がしたい
0027デフォルトの名無しさん
垢版 |
2021/12/31(金) 03:53:55.07ID:aP8qPSMg
自己解決したけどデータが多いとスタックが...
>countword . countchars . map chkspand $ " 1313 13 111 rfr fdf"
>5
0028デフォルトの名無しさん
垢版 |
2021/12/31(金) 14:45:34.52ID:KqmzC1Ir
リストみたいなただのデータコンストラクタだったら、いくら長くてもスタック関係ないのに
リストをfoldrしたような物が出てくるとスタックでみんな躓く
0029デフォルトの名無しさん
垢版 |
2021/12/31(金) 14:58:51.96ID:bqUePCKa
スクラッチで書くなら(0:)で0を追加して(0:1:_)をカウントしていくんだろうな

chkspand :: Char -> Int
chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1

wordcount = let
iterator [ ] = 0
iterator ( 0: 1: xs ) = 1 + ( iterator xs )
iterator ( x : xs ) = iterator xs
in iterator . ( 0 : )

main = do
print $ map chkspand $ " asas df df"
print $ wordcount . map chkspand $ " asas df df"
0030デフォルトの名無しさん
垢版 |
2021/12/31(金) 16:30:35.01ID:aP8qPSMg
>>29
wc5 = let
iterator [] = 0
iterator (0:1:xs) = 1 + (iterator xs)
iterator (x:xs) = iterator xs
in iterator . ((0::Int) :)

wc5 . map chkspand $ "0 hushjuh hhuj 89 546456"
5

上手く行きました
イテレータのパターンマッチ目からウロコ
0031デフォルトの名無しさん
垢版 |
2021/12/31(金) 20:42:25.11ID:aP8qPSMg
>>30のこれ
iterator (0:1:xs) = 1 + (iterator xs)
内部で
1+1+1+1+...が積みあがって最後に計算されるの?
0032デフォルトの名無しさん
垢版 |
2021/12/31(金) 20:58:03.01ID:bqUePCKa
>>31
それは処理系のimplement依存だから一概には言えないけど多分stack上に(1+)関数が乗っていって最後に確定した0が入ってから計算しそうな気がする
0034デフォルトの名無しさん
垢版 |
2022/01/02(日) 20:44:02.99ID:OOMiLRw0
>>30ちょと改変
wc6 = let
iter n [] = z
iter n (False:True:xs) = let n' = n + 1 in seq n' $ iter n' xs
iter n (x:xs) = iter n xs
in (iter 0) . (False :)

wcc = wc6 . map chkspand2
これのseq n'が効けば+1+1+1+1が積みあがらないはず
0036デフォルトの名無しさん
垢版 |
2022/01/03(月) 00:17:58.15ID:eS7vipFo
OOPでも、整数を他のオブジェクトとは全然違う形式にしないと
計算が遅過ぎてダサくなるよね

逆にオブジェクトの方を整数と同じようなGC非依存みたいな構造にする手もあるか
0037デフォルトの名無しさん
垢版 |
2022/01/03(月) 08:08:25.82ID:hLrwvjQQ
まぁコレは趣味による
Haskellでは性能面より可読性を重視するからな
それも使う人次第だけど
>>34のようにすればメモリも時間も節約できるけど可読性は失われる
どこまで我慢するかだけどオレは計算時間もメモリも線形までなら我慢して可読性を重視する
>>34だと入力に比例して要求されるスタック量が増える
線形までならしょうがないと思う
どのみち入力が大きくなるにつれてシステムが大きくなるのは元々しょうがないんだしその時の比例定数の違いまでなら我慢する
今具体的にやりたいことがあってその線形オーダーの無駄すら許されない状況なら考えるけど
0038デフォルトの名無しさん
垢版 |
2022/01/03(月) 11:20:12.64ID:TEX8BSo6
>>37
今回のお題はワードカウント、ファイルサイズがギガになる場合を想定
スタックなりヒープなりを消費しない手法は?です
Cなどで実装した場合、ループでカウントして再帰なしスタックもヒープも消費なしとか(可読性は...)

他にマルチスレッドで分割カウントした時の手法とか(ディスクのIOで律速か)
0039デフォルトの名無しさん
垢版 |
2022/01/03(月) 12:59:34.38ID:hLrwvjQQ
今回の場合1ワード消費するたびにスタック一個消費するから必要なメモリリソースが倍以上になる可能性もあるから意味はあるかな
特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな
しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?)
個人的にはこういうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる
数学的研究対象とかにするなら別だけど
0040デフォルトの名無しさん
垢版 |
2022/01/03(月) 15:29:08.17ID:TEX8BSo6
>>39
今回なにを確認したのか
それは、Cで組むような単純繰り返しを同じ感覚でヒャッハーとhaskellの遅延評価で行うと
ヤバイと言う教訓とそれを回避する手法
0041デフォルトの名無しさん
垢版 |
2022/01/04(火) 16:11:04.31ID:h755Av8k
Haskellを身に付けた人は他の言語も使えると予想しますが、いくつもの言語の中からHaskellを選んで
プログラムを書くのはどんな課題、問題を解決したいときなんでしょうか
0042デフォルトの名無しさん
垢版 |
2022/01/04(火) 16:44:18.80ID:HuVGMWib
課題が「ガベージをコレクトしたい」だけだったとしても
じゃあ静的型は不要だとかジェネリクスは不要だとはならない
だから課題と関係ない部分を作り込む
0043デフォルトの名無しさん
垢版 |
2022/01/05(水) 10:28:01.47ID:imDyM2+l
Twitterの検索で

@ohagiya @kenokabe

と入れると楽しいよな
0044デフォルトの名無しさん
垢版 |
2022/01/11(火) 17:47:50.88ID:rZde0CTm
>>43
ひどすぎるだろこれ
可哀想に
0045デフォルトの名無しさん
垢版 |
2022/01/14(金) 10:48:22.13ID:3PF6dXYX
最新の怪文書も読んだけどさ、毛の壁は毎回毎回威勢だけは良いんだよなw
たとえば「ちくわは民事でもやる!」「ちくわはもう詰み」(9年前)
「ちくわはもう死に体」(7年前)とかさ。
死に体なのに、つい最近もブログで恨み節w
ネズミ一匹、始末できないなんてだらしがないな
0046デフォルトの名無しさん
垢版 |
2022/01/15(土) 18:49:30.83ID:chCIM2fB
質問です
array と List の性能の差がいまいちピンと来ません
何か「この例ではどう考えてもarray、ほらこんなに性能に差が出る」って例ご存知ないですか?
0047デフォルトの名無しさん
垢版 |
2022/01/16(日) 12:22:44.80ID:f2QwXzzi
質問です
何かの文章で

square x = x*x
print $ square $ square 3

のようなプログラムをHaskell は
square $ square 3
→ square ( square 3 )
→ ( square 3 ) * ( square 3 )
→ ( 3 * 3 ) * ( 3 * 3 )

のようになる
コレを避けるためにseqを使えばよいとあったのですが試しに

import Debug.Trace

square x = x * x
const3 = trace "*" 3
main = do
print
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ const3

みたいなプログラムで試してみました
もし説明通りならconst3が2^15回呼ばれて*がいっぱい出てきそうですが、やってみると*は一個しか出てきません
コレは何故ですか?
ちなみにghcです
ghcがconst3の結果を自分で勝手に“メモ化”してよきにはからってくれているんでしょうか?
0048デフォルトの名無しさん
垢版 |
2022/01/16(日) 13:40:56.61ID:rC9oNTrC
メモ化は独自実装ではなく仕様

何かの文章は嘘
でも騙されたことがないので被害が存在しないし、加害者も存在しない
0049デフォルトの名無しさん
垢版 |
2022/01/16(日) 14:36:08.72ID:f2QwXzzi
>>48
仕様なんですか?
Language Reportかなんかに書いてありますか?
0052デフォルトの名無しさん
垢版 |
2022/01/16(日) 18:54:16.95ID:f2QwXzzi
>>51

square x = x * x



square x = seq x $ x * x

にして明治的に“xを評価してからx*xを計算せよ”に変えるともちろん*ひとつです
それは納得いきます
ウォークスルーHaskellにもそうなると書いてあるしHaskell Language Report 2010にもseqで正格評価になると書いてあります
なのでコレは納得いくんですがseqなしの場合の動作が文書と異なるように見えます
もちろん参照透過性があるので一度計算した結果をメモ化して再利用しても同じ答えにならないといけないので答え自体は同じになるわけですけど
コレはたまたまGHCの開発者が優秀でHaskellの標準動作としては保証されない事までやってくれてるだけなのか、標準動作としてメモ化しないといけないことになってるのかどっちだろうと
今のところ今自分が勉強してるプログラムにはseq入れて明治的に正格評価してもらってるんですけど標準でメモ化してくれるなら消せるしスッキリするし、あるいは明示しないと他の処理系だとしてくれないなら残しとかないといけないし
0053デフォルトの名無しさん
垢版 |
2022/01/17(月) 04:24:56.47ID:FNscPcIY
銀の弾丸のHaskellをIT企業が採用したら市場を席捲できるのでは???

実際そうなると思う?
0054デフォルトの名無しさん
垢版 |
2022/01/17(月) 13:17:04.94ID:3dpBVALW
Windows10にVSCode入れて、Haskellを遊ぼうとしたけど上手く入らない。

コマンドラインで細かく入れて遊ぶしかないかな。
0057デフォルトの名無しさん
垢版 |
2022/01/27(木) 10:10:34.06ID:orDFdZXN
毛さんは昔から色々酷いが
>>56のコメ欄の流れだけでいうと単に@Zuishinが分が悪いわ
珍妙な独自用語は早めに芽を摘まないといけない
0058デフォルトの名無しさん
垢版 |
2022/01/27(木) 11:59:44.42ID:oUTYjCet
岡部さんこんにちは
0060デフォルトの名無しさん
垢版 |
2022/01/27(木) 23:00:32.74ID:7u9WcLA6
そうじゃなくて、PHPやHaskellごときが偉そうにすんなって事だろ。
質問者が来たらお茶菓子くらい出せ。
底辺やマイナー言語はそうするべき。
0062デフォルトの名無しさん
垢版 |
2022/01/28(金) 09:50:56.34ID:F+QYYxM3
>>60
そもそも質問者が来たと思ってないんだろう
強いて言うなら「命令者」が来たと思われてるね
0065デフォルトの名無しさん
垢版 |
2022/02/01(火) 18:35:16.11ID:e9RXuv9o
>>56
どいつも誰だか知らんしどーでも良いが
見た感じ、@Zuishinの記事は確かにしょぼい記事だが、@stken2050の反論にも無理があるな

@Zuishinに関しては、大きな主張をしている割に根拠がかなりしょぼいせいで、記事として価値が低くなっているように思える

対する@stken2050の反論だが、「排他的ではないので反対ではない!」云々は無理がありすぎ
「反対」という自然言語の単語が元々ガバガバなのは誰だって知ってるんだから、それに対して自分で勝手に厳密な定義を与えて、その定義に基づいて矛盾を指摘したって、そりゃ「日本語わかりますか」言われるわ

さらに@stken2050の反論ではwikipediaと異なる高階関数の定義を使っているが、それならwikipedia以上に信憑性の高いソース出して、英語版wikipediaに書かれている高階関数の定義に疑問を呈するのが筋
それをしてないせいで論理的にぶっ飛んで見える
0066デフォルトの名無しさん
垢版 |
2022/02/02(水) 12:32:50.68ID:4gWS4lIC
>>63
無事、記事が凍結されたね
0067デフォルトの名無しさん
垢版 |
2022/02/04(金) 08:30:39.02ID:iaw7RH3I
完全に荒らしやろあれ
0068デフォルトの名無しさん
垢版 |
2022/02/08(火) 08:58:59.73ID:t2yWr+Jt
Haskellって日本人に受けそうで実際一時期話題になったけど
結局下火になっちゃったね
なんでだろう
0069デフォルトの名無しさん
垢版 |
2022/02/08(火) 12:34:20.88ID:iTFetD6R
haskellでしばらく何かを学んだら、元いたところに帰っていくんじゃないかな
0075デフォルトの名無しさん
垢版 |
2022/02/09(水) 19:00:25.72ID:/Rs/AQCx
Cじゃだめなん?
あと、型なしじゃなくて、動的型で良ければ、
Objective-Cがかなり自由度高かった気がする。
0076デフォルトの名無しさん
垢版 |
2022/02/10(木) 14:08:35.36ID:Rx8BtNec
単純に難しいからだろ
元の言語仕様はシンプルなのに、ソフトウェア工学的なノウハウに基づいてOOPと同等以上の実装を実現しようとすると、とたんに大量のGHC拡張と難解な型が出てきてわけわからんくなる
0078デフォルトの名無しさん
垢版 |
2022/02/11(金) 01:01:15.27ID:oG7lMZNP
setterの存在自体がマナー違反ということにすればある意味単純なんだよ
マナー違反したせいで複雑すぎるのは自己責任、言語のせいにするなってね
0079デフォルトの名無しさん
垢版 |
2022/02/12(土) 14:38:21.43ID:3EVMkjej
岡部健
0081デフォルトの名無しさん
垢版 |
2022/02/13(日) 02:50:13.95ID:gJE3VDE6
GHC方言とかの知識が豊富な奴ってどちらかといえば反抗的な性格だと思う
それなのに、オリジナルの仕様への忠誠心が高ければ高いほど有能みたいな誤解がある

その上更にいかにも忠誠心なさそうなキャラまで作られてるし
0082デフォルトの名無しさん
垢版 |
2022/02/14(月) 11:54:21.19ID:4AqyxcJv
最近数値計算の勉強してるんですけど、よく最近高速フーリエ変換を用いた乗算の高速化なんて話が出てきます
サイズの大きい整数の掛け算とかを高速化する手法で桁数n同士の乗算のコストをn log(n)に抑えるのだとか
これGHCのInteger型の乗算には応用されてますかね?
やっぱりそこまで速さに拘りたいならご自分でのスタンス?
GHCのソースが読めるほどのスキルはないのでよくわからない
そもそもGHCのソースってどこに転がってます?
0084デフォルトの名無しさん
垢版 |
2022/02/14(月) 20:56:01.04ID:uQiQyHca
ソースを1行も読まなくても分かることがいくつかある
IntとIntegerの二刀流ができるなら三刀流もできること
第二第三の型を追加するだけのためにコンパイラをコンパイルするのは無意味過ぎること
0085デフォルトの名無しさん
垢版 |
2022/02/14(月) 21:36:02.36ID:4AqyxcJv
>>82
見つからないorz

>>83
ちょっと数値計算の練習したいんですよ
例えば円周率10万桁とか
さすがに10万桁とかだとghcはデフォルトでは対応してくれないのかなと
仮にできるにしても10万桁×10万桁の計算で桁数^2オーダーで計算したのではその一個の掛け算で何年もかかってしまうことになりかねません
ただのarrayやlistなら10万要素位は扱ってくれそうですけど
ただHaskellでその手の大量データを扱うのは色々難しい問題があるらしいと言う話は聞いてたので今までは「そういうのはHaskellは向かない、そういう時はC」とか使い分けてました
しかしやはりHaskellでできないのは面白くないのでHaskellでもそういうでかいデータを扱えるスキルを身につけたいなぁというのもあります
まぁまだFFTでの掛け算プログラム勉強し始めたばっかりなので先は長そうですけど
とりあえず[Double]のFFTと逆FFT作ったとこまではやったんです
でもそこまで作って「アレ?もしかしてこんなの自作しなくてもそもそもHaskellのIntegerが最初からFFTで掛け算してるとかあるかも?GHCの開発者メチャメチャ優秀っぽいし」と思った次第
0086デフォルトの名無しさん
垢版 |
2022/02/14(月) 21:36:29.77ID:4AqyxcJv
あら、アンカー一個ずれ
0088デフォルトの名無しさん
垢版 |
2022/02/14(月) 23:13:34.14ID:4AqyxcJv
>>87
おお、thx
なるほどGMPというのを使ってるんですね

--Stack excangeより
GMP appears to use Schonhage-Strassen, but not until you start dealing with numbers with 10s of thousands of decimal digits.

GMPではSchonhage-Strassenを使用しているようですが、小数点以下が何万桁もあるような数字を扱うようになるまでは、このようなことはないようです。

--wikiより
GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。

基本算術型としてフルワードを使う。
オペランドの大きさによってそれぞれ異なるアルゴリズムを使う。非常に大きな数に有効なアルゴリズムは、小さい数では遅いことが多い。

----
要するに自分でわざわざSchonhage-Strassenのアルゴリズム実装しなくてもそもそもintegerで実装済みという事ですね
そうじゃないかと思ったw
そりゃそうでしょうねぇ、こんな優秀なソフトが数値計算理論の最新の成果取り入れてないわけがないw
10万桁とかIntegerで扱えるのかな?
実はData.FixedにあるFixed aで100桁くらいは余裕というのは確認済みなんです
週末にでも桁数増やして実験してみます
ありがとうございました
0090デフォルトの名無しさん
垢版 |
2022/02/15(火) 19:39:32.71ID:ujR6VeHM
>>89
おお、先人がいたww
いや〜Haskellって速さ求めるならあんまりいい選択肢ではなさそうですけどやっぱり挑戦してみたくなりますね
その人のページのリンク先がすごく参考になりました
ようやくChudnovskyの公式とかいうのがなんで最速なのかわかりました
収束速度そのものはどう考えてもAGMの方が早いのになんでChudnovskyの方が早いんだと
Binary Splittingという技使ってまとめて計算していく方法があるんですね
ちょっと感動しました
まぁともかくInteger型の計算で10億桁くらいまで実用的な?速度で計算できるもんなんですね
ボチボチやってみます
0094デフォルトの名無しさん
垢版 |
2022/03/28(月) 18:04:03.42ID:kSkV8rOb
文字列操作のパッケージを作っている。
1文字づつ評価して処理するのは出来るけど
ループで実現しようとすると、上手くいかない。
[Char]型とString型で混ぜて作ったせいか
ボトムアップ方式で作るのが間違えなのか。

まだまだ初心者の愚痴。
0098デフォルトの名無しさん
垢版 |
2022/05/25(水) 23:07:08.21ID:HGLTMsh1
>>91
純粋関数型といいつつ実際にはそうではないし
結局はモナドも使わなきゃ実用的なものは作れない
よく例題に上がるようなシンプルな書き方すると遅いし
Lispでも同じようにあった問題で綺麗な書き方よりも早い書き方が重視される
そうこうしているうちにどんどん人は離れていったよ
理念が現実に負けたのだと思う・・
0099デフォルトの名無しさん
垢版 |
2022/05/25(水) 23:31:09.11ID:HGLTMsh1
あとそうだ
なによりもデバッグがあまりに困難すぎるし
デバッグのために型制約とか何バカやってんだろな・・って思うことしばしば

作業環境が悪いのがまるで改善されないから嫌になる
0100デフォルトの名無しさん
垢版 |
2022/05/27(金) 23:36:10.66ID:IybSybG6
型はコンパイル時にしか存在しない
モナドクラスもコンパイル時にしか使わない
実行時に使われているのはモナドのインスタンスのみ
そのインスタンスは任意の言語で再発明できる
どの言語でデバッグしても困難は同じ

結局は再発明をやらなきゃ実用的な知識が身につかない
0102デフォルトの名無しさん
垢版 |
2022/05/28(土) 00:21:10.26ID:1xwNIN3l
Cのライブラリに丸投げする効率化を考えれば
デバッグの効率化にはこだわらない方が丸投げしやすい
0106デフォルトの名無しさん
垢版 |
2022/08/07(日) 20:06:46.56ID:My+goEll
ハマりました
次のコード通らん理由が分からん

import Data.Ratio

[[ a,b],[c,d]] *** [[ p,q],[r,s]] = [ [ a*p+b*r, a*q+b*s], [c*p+d*r],[c*q+d*s]]

i [[ a,b],[c,d]] = [[d,-b],[-c,a]]

a :: [[Rational ]]
b:: [[Rational ]]

a = [[1%1,99],[0,100]]
b = [[100,0],[-99,1]]

main = do
mapM_ print $ [ a, b , i a , i b]
print $ (( i b ) *** ( i a ) ) *** b

実行時エラーで
prog: prog.hs:4:1-79: Non-exhaustive patterns in function

になる
一項目のprintの出力

[[1 % 1,99 % 1],[0 % 1,100 % 1]]
[[100 % 1,0 % 1],[(-99) % 1,1 % 1]]
[[100 % 1,(-99) % 1],[0 % 1,1 % 1]]
[[1 % 1,0 % 1],[99 % 1,100 % 1]]

を見てもどう見てもパターンマッチしてるのに?
何故?
0107デフォルトの名無しさん
垢版 |
2022/08/08(月) 19:26:19.73ID:NwZYLTPj
>>106
リストの長さがマッチしてない
長さが2でないリストをどこで作ったのかはソースを読めば分かる
***は長さが3のリストを返す
0109デフォルトの名無しさん
垢版 |
2022/08/11(木) 18:04:41.32ID:9dSVJvSP
おまいらこのクソ暑い夏をどうにかするCOOLなコードをHaskellで簡潔に書けんのか?
0110デフォルトの名無しさん
垢版 |
2022/08/25(木) 11:20:55.19ID:97f0Pf6Z
ttps://hackage.haskell.org/package/mtl-2.3/docs/src/Control.Monad.Writer.Class.html#tell

listen ~(w, a) = (w, (a, w))
この~はどういう文法なの?
0112デフォルトの名無しさん
垢版 |
2022/08/25(木) 21:15:08.79ID:3SQ1xNiu
stack でwxHaskell インストールしようとしたんだが、
> stack install wxHaskell
とすると
Unknown package: wxhaskell
とでてインストールできない。
StackだとwxHaskellインストールできないの?んなわけないと思うんだが。
公式見てもstackの場合の方法が書いてない。
0115デフォルトの名無しさん
垢版 |
2022/09/10(土) 21:18:15.99ID:Jyomj+F3
ボトルネックは事実上バグと変わらないから
結局パフォーマンスを考えると
Haskellはバグが混入しやすい言語と言える
しかも入出力は正しいから解決がクッソ厄介で実用性はない
0119デフォルトの名無しさん
垢版 |
2022/09/24(土) 01:20:51.22ID:v6+/ywPo
書き込んでいた専門家たちが書き込みをやめたので下火になっている感が出ているわけですね。
0120デフォルトの名無しさん
垢版 |
2022/09/24(土) 02:26:09.94ID:vtJ0GRzX
イヤ、でも実際した火なんじゃない?
やっぱりHaskellで“性能”と“可読性”の両立を図るのはかなり難しい
やっぱり言語の生い立ちというか、性格というか、性能面、特に速度面の性能面はどうしても優先順位が低い、しかし実務上はもちろんそこは最重要factorだからそこがでないとした火になるのもやむを得ないかと
0121デフォルトの名無しさん
垢版 |
2022/09/24(土) 03:13:03.66ID:v6+/ywPo
仕組みはわからんが計画的だろ。
言い換えると、騒ぐ奴らがうざいから騒がなくなるまで下火なんだろう。
0122デフォルトの名無しさん
垢版 |
2022/09/24(土) 03:21:31.25ID:cIbikbIQ
てか元々世界のメジャーな言語に躍り出ようというつもりなんかHaskellコミュニティにはないのかもね
Haskellコミュニティなんて学者の集合体でしょ?
実務になんか元々興味ないんじゃない?
0123デフォルトの名無しさん
垢版 |
2022/09/24(土) 17:34:21.27ID:v6+/ywPo
StackでGUIプログラミングしたいのですが、stackでインストールできるライブラリで
おすすめのものはありますか。
0124デフォルトの名無しさん
垢版 |
2022/09/27(火) 18:16:48.82ID:2m9lsdvh
haskellで作ったチェスゲームありますか
コマとボードはきれいなグラフィックで
マウスでコマを動かすチェス
0125デフォルトの名無しさん
垢版 |
2022/09/27(火) 19:10:55.70ID:rbvXlCo3
来年のRustがこの状態。
0127デフォルトの名無しさん
垢版 |
2022/09/27(火) 20:30:27.34ID:Ctbd02WQ
とにもかくにももう少しHaskellは速度性能を出すための方法の標準化について詰めてほしい
Haskell2010の文章のメモ化の部分の詰めがダメすぎる
実情のGHCとかで提供されてるものと差がありすぎて意味がわからん
GHCでの研究成果をもっと標準仕様に取り入れてほしい
何をどうやったら確実にドレコレはメモ化されるかハッキリ文書化してほしい
0132デフォルトの名無しさん
垢版 |
2022/10/01(土) 22:58:35.36ID:76wmMtDf
標準規格を一番忠実に実装した奴が優勝みたいな考え方は全然数学的ではない
0134デフォルトの名無しさん
垢版 |
2022/10/04(火) 08:48:04.42ID:S20URLlI
ルールがない状態からルールが守られている状態へ誘導するか
何もしてないのに持続するルールを拾い集めるかの違い
0135デフォルトの名無しさん
垢版 |
2022/10/07(金) 20:15:05.17ID:xpYSJYo6
F#では。
0136デフォルトの名無しさん
垢版 |
2022/10/07(金) 20:28:34.11ID:lAeL408c
Erlang
0137デフォルトの名無しさん
垢版 |
2022/10/14(金) 22:28:23.68ID:GVf4qcGD
ラムダや <- や case で束縛される変数の値は二回以上計算されない
seqは計算のタイミングを変える効果しかない

難しいのは = で定義される名前だが
= の右辺で頑張ってseqを使っても報われない
0138デフォルトの名無しさん
垢版 |
2022/10/14(金) 23:54:06.57ID:91YiMGAd
でもhaskell 2010 reportには評価順を変える方法はseqしか規定されていない
GHQなどの実際の処理系でそれ以外のタイミングでメモ化されたりするのはあくまで処理系の独自仕様でしかない
ある処理系でメモ化されて早かったプログラムが別の処理系で同じ速度で処理してくれる保証などどこにもない
0139デフォルトの名無しさん
垢版 |
2022/10/15(土) 08:05:01.19ID:/BlEbfcm
>>138
もしかして、個人の感想のようなものを悪と思ってるのかね
そして客観的事実 (ようするに絶対正しい事実) と称するものが正義だと

個人の感想を排除するべきという思想はどこにも規定されてないでしょ
0141デフォルトの名無しさん
垢版 |
2022/10/15(土) 10:11:19.74ID:/BlEbfcm
ある人の感想が別の人の感想と同じになる保証はどこにもない
保証がなくても特に問題ないと判明したならそれでいい
0142デフォルトの名無しさん
垢版 |
2022/10/15(土) 10:19:45.48ID:+yYiQ+MP
一番嫌なのはネットに転がってるすごいスッキリしたプログラムがあって「おお、すげぇ」と思っても結局それはGHCのメモ化の恩恵でしかなくHaskell本来のそれではないので別の処理系では通用しないものであったりする事
事実上GHCが標準なのでGHCで早ければ「早いプログラムが書けない事はない」のではあるけど、じゃあGHCはどんな時は気をきかせてメモ化してくれるのか、どんな時はその事を利用して早い、しかし短い、わかりやすいプログラムを書けるのかはHaskell 2010 reportではなくGHCの方の仕様書を読むか、実験してみるかしかない、しかし前者はそもそもGHCの仕様書そのものどこにあるかわからないんだけど見つけてもおそらくメモ化の理論は相当に難しい論文レベルの話、さりとて実験で詰めていくのはデバッグと同じレベルのかなり苦痛な作業で、しかも完成したものは大概速さのために可読性をかなり犠牲にしないといけないものになる、当然可搬性も落ちてる
GHCがやってくれてる事全てでなくてもいいけどネットによく転がってるフィボナッチ数列とか素数生成とかのGHCの良きに計らってくれる機能を利用したスッキリした、けど早いプログラムくらいまでは標準化して全ての処理系で動くようにしてほしいけどね
0143デフォルトの名無しさん
垢版 |
2022/10/15(土) 11:46:05.26ID:fUoifk8c
まあ実際のところメモ化を考え出したら
Lispと同じように可読性を犠牲にした速度重視のコードしか生まれないので・・
メモ化は考えないのが筋だけどそうすると実用性は皆無であってつまり
0144デフォルトの名無しさん
垢版 |
2022/10/15(土) 15:59:55.52ID:/BlEbfcm
LispとHaskellの違いで重要なのは
モジュールの定義をインタラクティブにやらないこと
ghci起動時に全てのモジュールが定義され最後に
mainや他の式を評価・実行するところだけがインタラクティブ

そもそもmodule Main whereとかいうのは式ではない
式ではないから評価順序という考え方がそこでは通用しない
0145デフォルトの名無しさん
垢版 |
2022/11/03(木) 00:12:52.63ID:A4mGU1Ql
GHCがデファクトだしこだわりがなければ他のコンパイラを使うこともないでしょ
とはいえ関数型言語って速度を重視するタスクには向かないでしょ
速さを求めるのが間違い
0146デフォルトの名無しさん
垢版 |
2022/11/03(木) 01:14:31.73ID:+2fbLBnA
Symbolicsが失敗した事例を思い出す
あれも理想を追求したはいいけど何をやってもひたすら遅く
他社はそれより早く安い機材を次々と繰り出していた
当然惨敗は必然だった
0148デフォルトの名無しさん
垢版 |
2022/11/03(木) 11:53:42.15ID:k32TY8HF
結局のところHaskellの言語策定をしてるコミュニティは学者さんのコミュニティで実用的な性能を向上させる事にそもそも興味ないから実務面での有用性を期待するのは無理やね
0151デフォルトの名無しさん
垢版 |
2022/11/06(日) 14:53:18.67ID:p6fV7yyc
Haskellで開発している会社ってどこがあるの?
検索するとHERPやTuruCapitalしか出てこない…
0152デフォルトの名無しさん
垢版 |
2022/11/06(日) 16:00:47.05ID:8Hp8Ymz2
GHC9.4.3 リリース
0155デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:47:21.37ID:p6fV7yyc
あと朝日ネットの募集要項はHaskellがありました
朝日ネットに応募してみようかなぁ。
HERPはリファレンスチェックが面倒…(上司とかと会話したくない)
0157デフォルトの名無しさん
垢版 |
2022/11/07(月) 00:41:59.56ID:aVSF4vDw
Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
あえてHaskellを使う意味がない、みたいな…
0158デフォルトの名無しさん
垢版 |
2022/11/07(月) 11:14:09.19ID:uMWKgAVp
オーバーヘッドを気にせず頑健性を取りたいとき
うーん、具体例が出てこない
0159デフォルトの名無しさん
垢版 |
2022/11/07(月) 12:17:58.82ID:y2qdzeiV
>>157

> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
0161デフォルトの名無しさん
垢版 |
2022/11/08(火) 09:36:33.50ID:VjMrXhSs
消費者目線ではGHCはフリーソフトだからコストが高いとは言えない

コストという物差しが万能ではない具体例がいま出た
0163デフォルトの名無しさん
垢版 |
2022/11/09(水) 10:38:48.12ID:wL144bz5
どういう結果になるのか契約とか誓約しないのがオープンソース
お遊びにしかならないという保証もしてない
0165デフォルトの名無しさん
垢版 |
2022/12/03(土) 12:50:06.92ID:HJhX36nM
無生物であることは保証する
何も実験してないのに保証することを数学的と言えないこともない
0166デフォルトの名無しさん
垢版 |
2022/12/12(月) 16:34:32.76ID:Yq3RU8vo
Unreal Verse
https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか
0167デフォルトの名無しさん
垢版 |
2022/12/13(火) 21:33:17.94ID:s5AI7uvQ
ちょっとやってみるかと思ったら
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし

どうなってんのよ
haskell-modeなんて2016で止まってるし
0168デフォルトの名無しさん
垢版 |
2022/12/15(木) 08:50:05.16ID:hYy+q+Gy
>>166
10年越しのビジョン実現で胸熱
https://pc.watch.impress.co.jp/docs/column/kaigai/555239.html
>プレゼンテーションを見ると、Sweeney氏はゲームコードを走らせるプラットフォームが超並列化して行くことを予見し、Unrealの場合は80%のCPUユーセージを並列化が可能だと語っている。また、(ソフトウェア)トランザクショナルメモリや、プログラミングには関数型言語(例としてHaskellを挙げていたが、同時にHaskellに好ましくない点もあると説明している)がフィットすることなどを語っている。

それにしてもSPJを引き抜くなんてゲーム業界はすごい
0169デフォルトの名無しさん
垢版 |
2022/12/15(木) 11:15:36.01ID:3Q63kYiw
いや15年越し
https://game.watch.impress.co.jp/docs/20080911/epic.htm

>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
0170デフォルトの名無しさん
垢版 |
2022/12/17(土) 23:16:08.75ID:7V76W+iX
HaskellでWebシステムのバックエンドを開発したときのメモリ使用量は
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?
0171デフォルトの名無しさん
垢版 |
2022/12/23(金) 15:37:27.80ID:Rf1vHPUu
サーバとクライアントのサンプルプログラムを練習で書いたのだけど
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
0172デフォルトの名無しさん
垢版 |
2022/12/23(金) 20:44:32.65ID:Gou4DLut
>>171
明示的に変換しなきゃいけないのは事実だがその原因はC言語じゃない
言語と無関係だからこそHaskell2010でもC言語でも同じデータ構造が使える

>>170
データだけ見ればメモリ使用量を同じにすることは可能
0174デフォルトの名無しさん
垢版 |
2022/12/29(木) 23:24:37.93ID:pM4wQIt0
今haskellでguiを作るなら何がいい?
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
0178デフォルトの名無しさん
垢版 |
2023/01/02(月) 01:15:52.75ID:jETc9FsM
>>177
そうなの?それは実務的な意味で?
0179デフォルトの名無しさん
垢版 |
2023/01/02(月) 03:01:15.30ID:/m9PT5PE
ステマが酷すぎた。
0180デフォルトの名無しさん
垢版 |
2023/01/02(月) 03:01:59.29ID:/m9PT5PE
言いなおそう。
某出版社のステマが酷すぎた。
0181デフォルトの名無しさん
垢版 |
2023/01/03(火) 00:10:20.46ID:7mh2KVDC
見放されるようになったのは、
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。
0182デフォルトの名無しさん
垢版 |
2023/01/03(火) 04:29:29.65ID:yYGSV1g6
技術評論社のせいでは?
0183デフォルトの名無しさん
垢版 |
2023/01/04(水) 05:08:58.65ID:peYJ5uzH
メンテナーが次々と逃げ出してるのが象徴的・・
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる

遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
0184デフォルトの名無しさん
垢版 |
2023/01/04(水) 18:10:50.86ID:HUTbVNXS
PureScriptに移行しようぜ
正格評価で使いやすいし
0190デフォルトの名無しさん
垢版 |
2023/01/17(火) 00:55:50.42ID:zIKNxshB
無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる

生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
0192デフォルトの名無しさん
垢版 |
2023/01/17(火) 03:13:49.00ID:zIKNxshB
言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない
そう思わないなら関係ありそう
0194デフォルトの名無しさん
垢版 |
2023/01/19(木) 01:20:46.84ID:cE+DUb2P
クラウドは中に人がいるのか無人なのか調べられないので
人間と機械を混同したのではなく不確実にした
0205デフォルトの名無しさん
垢版 |
2023/01/29(日) 20:58:33.14ID:3238s/rq
教科書の通りなのになんでエラーになるんだろう?
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")

Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)
0207デフォルトの名無しさん
垢版 |
2023/01/30(月) 04:31:24.57ID:KsiNNj/4
>>206
ありがとうございます。その通りでした。
code:
pair :: (a->b, a->c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = pair (f, g) h
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
-- ([0,1,2,3,4],"hallo")
これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL
0208デフォルトの名無しさん
垢版 |
2023/02/01(水) 14:35:45.13ID:RAEJFXsc
Haskell使い(でLinux使い)の皆さんってxmonad使ってますか?
ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。
オリジナルのfocusUp'関数は
focusUp' :: Stack a -> a
focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs)
focusUp' (Stack t [] rs) = Stack x xs []
 where (x :| xs) = NE.reverse (t :| rs)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
0210デフォルトの名無しさん
垢版 |
2023/02/18(土) 07:53:47.68ID:pwjCq/Fb
>>208ですがスレチですかね
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
0211デフォルトの名無しさん
垢版 |
2023/02/23(木) 22:53:40.11ID:3VcdShfb
すみません
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが

具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。

v1 :: Maybe a
v1 = Nothing

v2 :: [a]
v2 = []

型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。

また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
0212デフォルトの名無しさん
垢版 |
2023/02/24(金) 02:14:24.44ID:PIH/rCf2
>>211
Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。

型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。
例: data Tree a = Leaf a | Node (Tree a) (Tree a)
この代数的データ型Treeは任意の型aを要素とする二分木を表します。
例: class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。
0213デフォルトの名無しさん
垢版 |
2023/02/25(土) 11:21:45.77ID:h/PI1ikt
>>212
ありがとうございます。

凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。

具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。

data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)

v3 :: Tree a
v3 = EmptyTree
0214デフォルトの名無しさん
垢版 |
2023/04/29(土) 14:07:24.45ID:AoTbqg9O
マルチポストだが教えてくれ
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
0215デフォルトの名無しさん
垢版 |
2023/05/01(月) 00:30:45.06ID:PDTetkfq
>>214
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
0219デフォルトの名無しさん
垢版 |
2023/06/20(火) 00:30:03.89ID:qm9+2t5E
do 記法でのメモ化について質問です
例えば

do
let x <- someComplexExpression
print $ f x
print $ g x

のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか?
少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした
なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います
ではsomeComplexExpressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか?
HLR2010ではswqを使えば良いとあるのですがこの場合
x <- seq someComplexExpression someComplexExpression
とかでうまく行くんでしょうか?
またそれでうまくいってるのかどうか確かめる方法はありますか?
つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
0220デフォルトの名無しさん
垢版 |
2023/06/25(日) 14:24:09.04ID:H+Ij4nqZ
質問にさせていただきます
違う標数での有限体での計算を必要とするコードを考えてます

ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して

x = F3 $ 1+2
y = F5 $ 2-5

のような記述ができればいいなと思ってます
そのためには

data FiniteFieldCh3 = F3 Int
instance Num F3 where...

のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ

class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t

instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )
0221デフォルトの名無しさん
垢版 |
2023/06/25(日) 14:24:14.71ID:H+Ij4nqZ
以下のようなerror が出てきます

prog.hs:22:10: error:
• The constraint ‘FiniteField a’
is no smaller than the instance head
(Use UndecidableInstances to permit this)
• In the instance declaration for ‘(Num a)’
|
22 | instance ( FiniteField a ) => ( Num a ) where
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

コレはなんですか?
ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に
{-# LANGUAGE FlexibleInstances #-}
を入れています
コンパイラはghc8.4.4です
よろしくお願い致します
0222デフォルトの名無しさん
垢版 |
2023/06/25(日) 14:43:47.12ID:H+Ij4nqZ
すいません、最後の行間違って修正前のやつコピペしました

class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t

instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )

です
よろしくお願い致します
0223デフォルトの名無しさん
垢版 |
2023/06/25(日) 15:08:12.64ID:CDxt6lPg
型クラスの単相性制限とか、関数従属性とか、とか。。。
的外れなこと言ってたらごめん。
0225デフォルトの名無しさん
垢版 |
2023/06/25(日) 17:33:31.79ID:OvK+yilq
ありがとうございます
現在まだ調べてる最中なんですけど

https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head

によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言

class ( C a ) => D a where ...

class ( D a ) => C a where ...

のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて

class ( C a ) => ( D ( toD a ) ) where ...

などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら
0227デフォルトの名無しさん
垢版 |
2023/07/04(火) 00:24:50.19ID:+0TfLuMN
>>226
こういうやつですね

data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)

instance Num FiniteField where
x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x )
x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x )
fromInteger x = FF x 1

でもコレだと例えば

x = FF 2 7
y = FF 4 7
x + y

のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行うという手間がかかります
しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします
実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです
しかもコレは型ではなく値なので型チェックの恩恵も受けることができません
プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
0229デフォルトの名無しさん
垢版 |
2023/07/06(木) 01:04:07.84ID:sds/6LG1
みなさん情報ありがとうございます
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
0230デフォルトの名無しさん
垢版 |
2023/08/05(土) 13:07:07.29ID:1IOAcn45
hage
0231デフォルトの名無しさん
垢版 |
2023/09/04(月) 14:41:20.09ID:FcZAE9nJ
haskellは廃れてきてるな、悲しい
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
0232デフォルトの名無しさん
垢版 |
2023/09/16(土) 21:21:50.35ID:6682wM15
数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?
0233デフォルトの名無しさん
垢版 |
2023/09/16(土) 21:25:49.38ID:6682wM15
等価判定演算子では順番を問わないが、
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが

一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
0234デフォルトの名無しさん
垢版 |
2023/09/16(土) 23:06:28.20ID:XG1/1lYn
順番がないやつと順番があるやつは
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?

逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
0235デフォルトの名無しさん
垢版 |
2023/09/16(土) 23:13:33.62ID:6682wM15
数学的概念として等価だったりどちらが特殊とか言えないのは納得しています

ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
0236デフォルトの名無しさん
垢版 |
2023/09/17(日) 02:24:17.53ID:yNwKlKA6
データ型としての起源としては
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
0237デフォルトの名無しさん
垢版 |
2023/09/17(日) 02:39:39.55ID:XqeO/FaW
組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
0238デフォルトの名無しさん
垢版 |
2023/09/17(日) 23:47:13.96ID:70jB6wMR
初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
0239デフォルトの名無しさん
垢版 |
2023/09/18(月) 10:00:00.93ID:E5yF50jH
俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない
0240デフォルトの名無しさん
垢版 |
2023/09/19(火) 19:53:05.75ID:QCYT99dv
unixのtouchを実現したいのですが

{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString

main = do
touchFile "hoge.txt"

touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
0241デフォルトの名無しさん
垢版 |
2023/09/19(火) 19:54:00.31ID:QCYT99dv
unixのtouchを実現したいのですが

{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString

main = do
touchFile "hoge.txt"

touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
0242デフォルトの名無しさん
垢版 |
2023/09/19(火) 19:58:16.28ID:QCYT99dv
すみません、書き込むボタンの反応がなかったので連投になってしまいました
0247デフォルトの名無しさん
垢版 |
2023/09/20(水) 08:53:25.46ID:I55f6i4N
>>246(bash)でお茶を濁した

perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う
正規表現とグロブ、ファイル入出力はできた
他に何かあるかな
0248デフォルトの名無しさん
垢版 |
2023/09/22(金) 12:15:07.45ID:NjV4q9P3
数値のリストl=[1,10,3]みたいなのを
1 10 3と出力したい。末尾には空白はあってはならないとする
最初
putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l
こんなのを考えたのだが10も1 0と分解されてしまった
しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか
mp [] = return ()
mp [x] = putStrLn $ show x
mp (x:xs) = do
putStr $ show x ++ " "
mp xs
0251デフォルトの名無しさん
垢版 |
2023/09/22(金) 14:01:12.58ID:W8j4O+ex
泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
0252デフォルトの名無しさん
垢版 |
2023/09/27(水) 15:30:51.70ID:9Ywamwi5
{-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
0254デフォルトの名無しさん
垢版 |
2023/10/11(水) 15:16:15.28ID:1pnnvG+R
groupBy (\a b -> snd a == snd b)
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした
0255デフォルトの名無しさん
垢版 |
2023/10/11(水) 17:39:54.48ID:Fikp0OWy
>>254
import Data.Function
groupBy ((==) `on` snd)

結局かっこは使うのだけど、これがあなたの求めるものでしょうか
0256デフォルトの名無しさん
垢版 |
2023/10/11(水) 22:05:36.63ID:1pnnvG+R
括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!
0257デフォルトの名無しさん
垢版 |
2023/10/18(水) 05:38:40.90ID:vCrdR6l9
QuickCheckを勉強しているんですが
Runtime Errorを検出したくて次のように書きました
anの要素は2以上n以下で複数回出現します
testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには
どうしたら良いのでしょうか
verboseCheckを指定してみるとskippedだらけなのですが
スキップしたやつは表示しないで欲しい

prop :: Positive Int -> [Int] -> Property
prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do
a' <- run (solve n an)
assert True
0258デフォルトの名無しさん
垢版 |
2023/11/16(木) 18:41:54.01ID:wXoixzgD
岡部健、復活したよ!

エックス内を
“Ken140291“
で探してみて下さい。

最近登録したばかりの様です。
0267デフォルトの名無しさん
垢版 |
2023/11/22(水) 15:27:17.26ID:1OepVPCl
こんなコードがあるのですが
cumsum k = unfoldr next . (,) 0
where
next :: (Int, [Int]) -> Maybe (Int, (Int, [Int]))
next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs))
next _ = Nothing
acc <= k-xはわかるのですが、acc' <- acc + xというのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?
0269デフォルトの名無しさん
垢版 |
2023/11/23(木) 07:24:43.49ID:WRBO39fy
<-はパターンガード修飾子と呼ぶのですね
初めて知りました
ありがとうございました
0271デフォルトの名無しさん
垢版 |
2023/12/04(月) 12:27:24.28ID:GjmDAseS
>>270
ぎゃっはっはっはっはw
0272デフォルトの名無しさん
垢版 |
2024/01/01(月) 20:17:21.69ID:DcfOChZv
mapAccumL/Rの使いどころがよくわからないのですが
どういう時に使うとかの指針ってありますか?
0273デフォルトの名無しさん
垢版 |
2024/01/09(火) 22:50:44.14ID:3mg8b04T
ここ5年で発売されたHaskellの書籍で最も優れたものを紹介してください
0274デフォルトの名無しさん
垢版 |
2024/01/12(金) 10:55:28.35ID:cAhPSGjh
オワコン
0275デフォルトの名無しさん
垢版 |
2024/02/29(木) 01:38:01.78ID:d2gqoSk4
windowsにインストールできんみたいだなcabalがエラー?
まあwindowsでやるなってことだな
0276デフォルトの名無しさん
垢版 |
2024/03/03(日) 23:47:35.89ID:9XAeTkis
モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果

何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。

って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、

モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。

という結論に至った。

アウトソーシング先が(数学の)外の世界だとIOモナドで、同じ数学の世界だとその他のモナド。

それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、
副作用はないと言う主張に矛盾はない(のか?)
(もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?)

そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。
0277デフォルトの名無しさん
垢版 |
2024/03/04(月) 00:46:59.53ID:XMYw3zR0
箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する

そうすると箱の中に処理されたデータとIOウイルスが入った状態になる
これを延々と繰り返すのがIOモナド

ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな
0278デフォルトの名無しさん
垢版 |
2024/03/04(月) 01:02:22.82ID:vyClhVzf
ふーむ。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)

そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。
0279デフォルトの名無しさん
垢版 |
2024/03/04(月) 01:22:40.61ID:XMYw3zR0
doの場合は1行ごとに新しい箱が作られてる
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される

外界の予測不能な状態を全部1つの箱の中に押し込んで
箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ

数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな
0280デフォルトの名無しさん
垢版 |
2024/03/06(水) 10:29:39.18ID:Yy7OLBEk
なんか大げさな例えを使いたがるやつが増えたなぁ
コーディングの上でなんの役に立つんだが
0281デフォルトの名無しさん
垢版 |
2024/03/06(水) 15:29:14.97ID:soRPwZI7
「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること
0282デフォルトの名無しさん
垢版 |
2024/04/10(水) 04:46:37.45ID:+L19CyUd
WindowsでghcupをインストールするのにWSLが不要になって
PowerShellだけで導入できるようになってる
0283デフォルトの名無しさん
垢版 |
2024/04/13(土) 09:43:59.70ID:p3ysjEUv
rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな
0284デフォルトの名無しさん
垢版 |
2024/04/13(土) 10:37:58.47ID:VEwLcqlL
idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い
特にstatic reference counting周り
0285デフォルトの名無しさん
垢版 |
2024/04/13(土) 22:46:49.50ID:p3ysjEUv
色々知らないのがあった、ありがとう
static reference countingつーのが流行りなの
最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね
0286デフォルトの名無しさん
垢版 |
2024/04/14(日) 08:32:57.22ID:ZXz6cRZI
IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。

let x = 0 in return (x + 1) >>= x -> print x

こうすると変数xはシャドーイングによって同名の別の変数が生成される。

getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。
レスを投稿する


ニューススポーツなんでも実況