2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

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

1 :デフォルトの名無しさん:2021/12/17(金) 12:57:26.37 ID:NPioGyUL.net
関数型プログラミング言語 Haskell について語るスレです。

Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/

前スレ
関数型プログラミング言語Haskell Part33
https://mevius.5ch.net/test/read.cgi/tech/1581326256/

280 :デフォルトの名無しさん:2024/03/06(水) 10:29:39.18 ID:Yy7OLBEk.net
なんか大げさな例えを使いたがるやつが増えたなぁ
コーディングの上でなんの役に立つんだが

281 :デフォルトの名無しさん:2024/03/06(水) 15:29:14.97 ID:soRPwZI7.net
「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること

282 :デフォルトの名無しさん:2024/04/10(水) 04:46:37.45 ID:+L19CyUd.net
WindowsでghcupをインストールするのにWSLが不要になって
PowerShellだけで導入できるようになってる

283 :デフォルトの名無しさん:2024/04/13(土) 09:43:59.70 ID:p3ysjEUv.net
rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな

284 :デフォルトの名無しさん:2024/04/13(土) 10:37:58.47 ID:VEwLcqlL.net
idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い
特にstatic reference counting周り

285 :デフォルトの名無しさん:2024/04/13(土) 22:46:49.50 ID:p3ysjEUv.net
色々知らないのがあった、ありがとう
static reference countingつーのが流行りなの
最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね

286 :デフォルトの名無しさん:2024/04/14(日) 08:32:57.22 ID:ZXz6cRZI.net
IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。

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

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

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

287 :デフォルトの名無しさん:2024/05/17(金) 10:56:06.61 ID:kEVlBeR0.net
参照カウントは0になれば即座にデストラクタを呼び出す
つまり呼び出しを遅延しない
正格にすることと参照カウントを入れることは実質的に同じこと

288 :デフォルトの名無しさん:2024/05/18(土) 22:55:12.58 ID:HEnIptqp.net
cabalのバージョン上がってたので
windowsで試したらちゃんと動いたわ
気にかけてくれてたんやな

289 :デフォルトの名無しさん:2024/06/11(火) 20:46:47.08 ID:zqrBHeqN.net
IOモナドを拡張して、副作用をDBだけに限定したモナドとか作れないの?

290 :デフォルトの名無しさん:2024/06/20(木) 02:22:58.45 ID:s4SRXQdp.net
いつの間にかHaskellがC#より速くなってた…。
https://nshinchan01.hateblo.jp/entry/2024/06/20/021327

291 :デフォルトの名無しさん:2024/06/23(日) 11:34:59.09 ID:1+Xj+JzS.net
すみません
GHCのWindows11対応についての質問ですが
「9.2」以前のGHCはWindows11をサポートしていないとの事ですが

ttps://gitlab.haskell.org/ghc/ghc/-/wikis/platforms/windows

これはプログラムコンパイルをして
アプリケーションを生成できないだけで
コンソール内での実行や学習をする分には
「9.2」以前のGHCでも問題ないとの認識で大丈夫でしょうか。

ライブラリが9.0に対応していない物があり確認したいです。

292 :デフォルトの名無しさん:2024/06/23(日) 21:13:21.29 ID:1+Xj+JzS.net
度々すみません。

GHCのWindows11対応についての質問の件
Windows11機にGHC8.xをインストールして試した所

問題なくコンソールから実行して
結果のデータファイル生成できました。

取り敢えずはこれでやってみます。

293 :デフォルトの名無しさん:2024/07/03(水) 21:32:31.40 ID:FVo2vRsM.net
Functorってf : value -> valueの関数をfmap f : computation -> computationの関数に拡張してあれこれするけど、
そもそもvalue -> value関数がいらなくない?

わざわざvalue とcomputationを区別するから難しくなるのであって、
全部Functor適用した体で computation -> computationの拡張関数だけ使うように
設計しなおせばもっと普及するんじゃない?

294 :デフォルトの名無しさん:2024/07/03(水) 23:29:27.98 ID:XPii5wC3.net
何を言っとるんじゃw

295 :デフォルトの名無しさん:2024/07/04(木) 00:05:21.90 ID:CIK9cQRa.net
computationにしたら理論的にカプセル化されるから、例えばT computationで専用に作った関数はU computationでは使いまわしできない。
だから一般的にvalue -> valueで作ることでT computationでもU computationでも使いまわしできるようにしてるというのはわかる。

でも、そういうところが使いにくくて普及してないんじゃないかと思うから、T computationで専用で作った関数も特に何もせず
U computationの関数として使えるようになったらもっと使いやすくなると思う。

というかHaskellにはcomputationの概念は百害あって一利なしなんじゃまいか。

296 :デフォルトの名無しさん:2024/07/04(木) 14:17:13.04 ID:PVQ//B0J.net
>>295
君の言うcomputationってどういう定義?

297 :デフォルトの名無しさん:2024/07/04(木) 19:36:46.28 ID:CIK9cQRa.net
しらんがな。
一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。

自分の意図としては、”計算機”上で生成されたデータ。
計算機というのは電子計算機に限定されない。
電卓でもいいし、そろばんでもいいし、計算するときのもととなる
数の表現とかをcomputationと呼んでも差し支えないと思ってる。

たとえば、
value:27
に対して電子計算機上だと
11011(2)
で表現されるものがcomputation。

そろばんだったらそろばんの玉の配置。
計算してパチパチ音が出るのが副作用。

逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の
何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。

298 :デフォルトの名無しさん:2024/07/04(木) 23:38:08.08 ID:iUDrYol2.net
>>297
computationはvalueの一つ
`5 + 3`がcomputation
`Just 8`もcomputation

299 :デフォルトの名無しさん:2024/07/05(金) 00:05:27.16 ID:b38yqPqv.net
>>298
computationがvalueの一つだったら
概念的に computation ⊆ value
になるけど。
少なくとも拡張しているのだから
computation ⊇ value
にならないとおかしくない?

`5 + 3`がcomputationというのは前提にもよるからなんとも言えないと思う。
計算して8(=5+3)を導いたなら8はcomputationだと思うが。
たとえば、掛け算だったとして、九九を唱えてゴサンジュウゴで15を導き出したんなら計算してないからvalueだと思う。

300 :デフォルトの名無しさん:2024/07/05(金) 00:53:37.68 ID:DkqpNxkH.net
>>299
おかしくないよ
OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?

`九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation
導き出された結果と導き出す計算を区別して

301 :デフォルトの名無しさん:2024/07/05(金) 02:03:56.64 ID:b38yqPqv.net
やっぱりHaskellスレにcomputationネタわかる人いたんだね。

>>300
>OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
ここは納得。

>導き出された結果と導き出す計算を区別して

なにか f: value -> computation型の関数を念頭に置いて
`f ()`はcomputationと言っているのでは?

意図を勘違いしているかもしれないですが、computationはあくまで導き出された結果でしょう。
それと、関数の返り値を導き出す計算をするにあたって出てくる効果を定義に含めようとしているように感じたのですが、
それはあくまで value -> computation型の関数を計算することに付随する性質であって
computation概念そのものじゃないと思うのですが。
あくまでcomputation概念自体はそういう関数を計算して得られた計算結果なんじゃないですかね。
そう考えると何か不都合な例とかあります?

302 :デフォルトの名無しさん:2024/07/25(木) 23:56:39.51 ID:zdgCFOr2.net
stateやioモナドってHaskell以外でも使われてるの?
maybeやeitherは関数型でない言語でも同等のものがあるから分かるけど、stateやioはいまいち便利そうな感じがしない

303 :デフォルトの名無しさん:2024/07/26(金) 05:41:42.96 ID:JmafwQnp.net
>>302
それはそうで、IOモナドは他の言語例えばC言語系列だとhoge();の";"部分を数学的に表現しただけだから。
見た目だけなら

x = x + 1;
printf("%d\n", x);



return (x + 1) >>= \x -> print x

do形式に直して

x <- return (x + 1)
print x

ただ、x <- の部分は同名の別の変数をシャドーイングしてるので、厳密にメモリの動作まで合わせるならIORefを使う。

Haskellから見たらメモリもIO処理(ファイル処理含む)も等しく外部への入出力という扱い。

だから、実用としては意味が無い。
一見複数行に見えるコードがその気になれば全部一行に出来るという感動はあるが、それだけだ。

Haskellを仲立ちにして数学とプログラミング言語の関係を研究したりには便利。

逆に自力でIOモナドをPythonなどの適当な言語で実装して全てのコードを関数っぽく書ける。
(Pythonだと演算子の自作が出来ないのでf = (>>=)みたいな事になる)

Haskellは便利だから使うものじゃない。
美しいから使うものだ。

あ、でも腐っても最新版は実行速度が結構上がってる(C#/Java並み)ので、選択肢から外される理由も減ってきた気がする。

304 :デフォルトの名無しさん:2024/07/26(金) 05:47:41.29 ID:JmafwQnp.net
そこまで気づくと、Gtk2hsとかWin32とかのC/C++からのラッパーライブラリを関数型言語っぽくない!って拒否する気持ちが分からなくなる。

305 :デフォルトの名無しさん:2024/07/26(金) 06:16:02.54 ID:JmafwQnp.net
あ、IOモナドの利点一応あった。
入力関数が他の関数の引数になったり、他の関数に関数合成出来ない。
Pythonのprint(input())みたいなコードや、len(input())みたいなコードは無理。
ここをしっかり分けることで、そういう変な使い方でのエラーは出ない。

もっと広い視点で言えば、入出力がIOモナドという型で分かれているのでネストの深いループの中でも入出力時に型を意識する必要があるので、そういうバグが大分減る。

手続き型関数型関係なく、ネストの深いループの中のデータが今どんな状態かを頭の中で把握出来る人はそう多くない。

だから、デバッグ時に解きほぐしていくんだが、関数型の方が切り分けしやすいかも?

306 :デフォルトの名無しさん:2024/07/26(金) 06:20:50.81 ID:EERDttnJ.net
Halkellのその先が見たい?
Rustにその答えが全て詰まっている

307 :デフォルトの名無しさん:2024/07/26(金) 08:11:21.54 ID:3P5OnSpM.net
どなたか教えてください。
数学の構成や命題の証明に使うならば、HaskellとOCamlはどちらがよいでしょうか。

308 :デフォルトの名無しさん:2024/07/26(金) 12:15:47.14 ID:f34zQmtT.net
Rustは、メモリが見えすぎるのがイヤだー
大したもの書かないから、GCありでお願いしたい

309 :デフォルトの名無しさん:2024/07/26(金) 17:24:09.33 ID:HoH4md/R.net
>>307
漠然としすぎ
やり直し

310 :デフォルトの名無しさん:2024/07/26(金) 17:58:43.47 ID:dth0vnjc.net
数学の構成?

311 :デフォルトの名無しさん:2024/07/27(土) 00:29:15.86 ID:r3Qeb3es.net
>>307
Coqという証明支援プログラミング言語をお使い下さい。

Haskellでも型プログラミングでゴリゴリ自力で命題の証明出来るそうですが、ある程度自動化されている専用言語の方が良いでしょう。
Coqはその中でも日本語情報が多いです。

312 :デフォルトの名無しさん:2024/07/27(土) 00:43:27.29 ID:r3Qeb3es.net
>>306
実用言語、特に組み込み分野を置き換えるのに期待されてる。
特集記事が無くてもお題スレ見たいな、Rustで問題を解こう的な連載が続いてる辺り、
特にinterfaceの編集陣の熱量は感じる。

Haskellも先駆者の記事によればWeb向けとしては神言語だそうだ。
ただ、周辺環境が未整備なだけで。
(なので、自分で全部作るという茨の道を進む「覚悟」が必要だとか)
未だにそうではないことを祈るが…。

313 :デフォルトの名無しさん:2024/07/27(土) 00:53:19.48 ID:r3Qeb3es.net
>>307
数の構成の方は、代数的型と基本的な方だと(一部)derivingで自動生成してもらえるから、Haskellはとても楽。
print関数で表示する部分だけでも自動生成してもらう価値はある。
(Read,Enum,Ordで生成されるのは確認済み)

data Nat = Zero | Succ Nat deriving (Show)

連続関数はPCそのものの限界で無理。
代数的型でメモリの続く限りの範囲なら少数も作れるかもしれない。
(その前にリストなり何なりで10進数位取り記法を導入しないと、Natは無限進数なので小数点第1位が1万とか、無限に桁上がりしない構造になる)

314 :デフォルトの名無しさん:2024/07/27(土) 13:46:44.73 ID:f/jP9uGd.net
>>307
結局こいつがなんの返信もしてない時点で適当に書き込んでたってことがわかるよ
真面目に相手をしないほうがいい

315 :デフォルトの名無しさん:2024/07/27(土) 16:19:23.58 ID:Z663WedI.net
>>313
ありがとうございます。

316 :デフォルトの名無しさん:2024/07/27(土) 17:29:46.87 ID:sW1zoNGb.net
>>311-313>>314は同一人物だよ
騙されないで

317 :デフォルトの名無しさん:2024/07/27(土) 21:26:10.11 ID:wvv58UYW.net
知ってた

318 :デフォルトの名無しさん:2024/07/27(土) 23:34:35.07 ID:r3Qeb3es.net
>>316
他人を語ったつもりもないけどね?(ID見れば分かるんだし)
ちなみに>303-305も私だ。

1日2-3回くらいしか見に来ないから、書き込めることはまとめて書き込んだ結果です。

319 :デフォルトの名無しさん:2024/08/01(木) 12:24:32.72 ID:XzWUPxYY.net
プロセッサメーカはAIブームと見るやこぞってAI処理特化プロセッサの開発競争
関数型言語に特徴的な処理に特化したプロセッサは誰も作ってくれない

320 :デフォルトの名無しさん:2024/08/01(木) 16:36:21.75 ID:rWBa8MOA.net
それ必要か?

321 :デフォルトの名無しさん:2024/08/04(日) 23:21:47.06 ID:y1wQ9MUm.net
>>319
スタックコンピューターは、Lispの時にぽしゃった。

322 :デフォルトの名無しさん:2024/08/05(月) 21:33:27.17 ID:FcOscapW.net
日本企業がLisp専用マシン作ったが第五世代コンピュータプロジェクトが💩で何らまともな成果をあげられなかったからね。

323 :デフォルトの名無しさん:2024/08/11(日) 17:42:41.08 ID:7wNJGHOt.net
麓から山頂を目指す

foldl: 徒歩で登り切ったら滑り台で向こう側へ降りてゴンドラで再び山頂へ戻りゴール
foldr: ゴンドラでいきなり山頂へ。そこから向こうの麓まで滑り台で降り、そこから山頂へ徒歩で戻る。但しある場合は滑り台を途中で降りてそこから山頂へ徒歩で戻ってゴールにしてもよい

こういうこと?

324 :デフォルトの名無しさん:2024/08/12(月) 21:44:35.95 ID:EAbaqMlq.net
Preludeのライブラリドキュメントのページが最新のChromeでよく応答なしになるんですが!
現代PCでもプチフリを起こすページとか凄いですね!(怒)

325 :デフォルトの名無しさん:2024/08/13(火) 01:44:03.00 ID:3Ko8/FbA.net
>>324
hoogle使いんさい。

326 :デフォルトの名無しさん:2024/08/13(火) 01:45:16.10 ID:3Ko8/FbA.net
>>323
foldl = 末尾再帰を高階関数化
foldr = 普通の再帰を高階関数化

327 :デフォルトの名無しさん:2024/08/15(木) 10:15:40.11 ID:oieuoNWz.net
yesod を導入しようとして調べているのですが、今は stack 前提で cabal での利用は考えられていないのでしょうか?
導入記事では cabal の記述がありますが、
yesod init すると stack new 使えと表示が出ます。

328 :デフォルトの名無しさん:2024/08/15(木) 10:30:38.08 ID:oieuoNWz.net
yesod-bin 1.6.2.3 です

329 :デフォルトの名無しさん:2024/08/19(月) 21:35:37.73 ID:CkMOJkdv.net
rambda.jsのfold相当の関数を教えてください

96 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver.24052200