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/

237 :デフォルトの名無しさん:2023/09/17(日) 02:39:39.55 ID:XqeO/FaW.net
組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる

238 :デフォルトの名無しさん:2023/09/17(日) 23:47:13.96 ID:70jB6wMR.net
初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな

239 :デフォルトの名無しさん:2023/09/18(月) 10:00:00.93 ID:E5yF50jH.net
俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない

240 :デフォルトの名無しさん:2023/09/19(火) 19:53:05.75 ID:QCYT99dv.net
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で作ろうとしてるのですがバグがあるのでしょうか?

241 :デフォルトの名無しさん:2023/09/19(火) 19:54:00.31 ID:QCYT99dv.net
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で作ろうとしてるのですがバグがあるのでしょうか?

242 :デフォルトの名無しさん:2023/09/19(火) 19:58:16.28 ID:QCYT99dv.net
すみません、書き込むボタンの反応がなかったので連投になってしまいました

243 :デフォルトの名無しさん:2023/09/19(火) 20:14:24.31 ID:a563RtWW.net
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ

244 :デフォルトの名無しさん:2023/09/19(火) 20:14:45.64 ID:a563RtWW.net
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ

245 :デフォルトの名無しさん:2023/09/19(火) 20:18:27.88 ID:a563RtWW.net
ありゃ俺も連投しちまったすまん
なんか5ch重いっぽいね

246 :デフォルトの名無しさん:2023/09/20(水) 08:38:40.03 ID:I55f6i4N.net
for i in * ; do touch anotherdir/$i ; done

247 :デフォルトの名無しさん:2023/09/20(水) 08:53:25.46 ID:I55f6i4N.net
>>246(bash)でお茶を濁した

perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う
正規表現とグロブ、ファイル入出力はできた
他に何かあるかな

248 :デフォルトの名無しさん:2023/09/22(金) 12:15:07.45 ID:NjV4q9P3.net
数値のリスト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

249 :デフォルトの名無しさん:2023/09/22(金) 13:06:36.18 ID:8SLDLfd5.net
https://jutememo.blogspot.com/2008/06/haskell-join-listdata-intersperse.html

250 :デフォルトの名無しさん:2023/09/22(金) 14:01:02.50 ID:NjV4q9P3.net
putStrLn $ intercalate " " $ map show l
これでいけました

251 :デフォルトの名無しさん:2023/09/22(金) 14:01:12.58 ID:W8j4O+ex.net
泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな

252 :デフォルトの名無しさん:2023/09/27(水) 15:30:51.70 ID:9Ywamwi5.net
{-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ

253 :デフォルトの名無しさん:2023/09/27(水) 17:59:16.99 ID:k7PwLxD8.net
readが定義されたモジュールは別のLANGUAGEってこと?

254 :デフォルトの名無しさん:2023/10/11(水) 15:16:15.28 ID:1pnnvG+R.net
groupBy (\a b -> snd a == snd b)
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした

255 :デフォルトの名無しさん:2023/10/11(水) 17:39:54.48 ID:Fikp0OWy.net
>>254
import Data.Function
groupBy ((==) `on` snd)

結局かっこは使うのだけど、これがあなたの求めるものでしょうか

256 :デフォルトの名無しさん:2023/10/11(水) 22:05:36.63 ID:1pnnvG+R.net
括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!

257 :デフォルトの名無しさん:2023/10/18(水) 05:38:40.90 ID:vCrdR6l9.net
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

258 :デフォルトの名無しさん:2023/11/16(木) 18:41:54.01 ID:wXoixzgD.net
岡部健、復活したよ!

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

最近登録したばかりの様です。

259 :デフォルトの名無しさん:2023/11/18(土) 16:03:54.22 ID:sLhTkQlu.net
自分で書き込んでいるのでは・・・。

260 :デフォルトの名無しさん:2023/11/19(日) 15:31:44.23 ID:/inwpH7b.net
>>248
init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK

261 :デフォルトの名無しさん:2023/11/20(月) 09:46:08.35 ID:sZ0M6Dsh.net
>260 打ち間違えた!
lnlt$foldl(\a x->a ++show x++" ")[][1,10,3]
が正解。

262 :デフォルトの名無しさん:2023/11/20(月) 14:32:44.66 ID:4MiKC4cJ.net
>>258
ぎゃははははははは

263 :デフォルトの名無しさん:2023/11/20(月) 21:45:30.49 ID:Jf1v4QK8.net
https://github.com/ken-okabe/functional-programming-from-scratch-ja#before

> Unkown(気づいてない)

ウンコウンわろた。

264 :デフォルトの名無しさん:2023/11/20(月) 23:57:47.37 ID:N43MAaAU.net
スレチ

265 :デフォルトの名無しさん:2023/11/21(火) 12:01:48.14 ID:MS7pneIs.net
毛の壁くん復活してたのか!!

266 :デフォルトの名無しさん:2023/11/21(火) 12:21:46.16 ID:W0g+S6dW.net
https://archive.md/m7008

毛の壁(岡部健)についてはここが詳しい

267 :デフォルトの名無しさん:2023/11/22(水) 15:27:17.26 ID:1OepVPCl.net
こんなコードがあるのですが
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というのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?

268 :デフォルトの名無しさん:2023/11/22(水) 16:31:30.12 ID:PuIW3qrN.net
>>267
パターンガードかな
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

269 :デフォルトの名無しさん:2023/11/23(木) 07:24:43.49 ID:WRBO39fy.net
<-はパターンガード修飾子と呼ぶのですね
初めて知りました
ありがとうございました

270 :デフォルトの名無しさん:2023/11/24(金) 17:42:26.91 ID:V3Fz2AWZ.net
毛の壁のTwitterの新しいアカウントは

Ken140291
FPFSstutorial
leadmove3648637

です!!

271 :デフォルトの名無しさん:2023/12/04(月) 12:27:24.28 ID:GjmDAseS.net
>>270
ぎゃっはっはっはっはw

272 :デフォルトの名無しさん:2024/01/01(月) 20:17:21.69 ID:DcfOChZv.net
mapAccumL/Rの使いどころがよくわからないのですが
どういう時に使うとかの指針ってありますか?

273 :デフォルトの名無しさん:2024/01/09(火) 22:50:44.14 ID:3mg8b04T.net
ここ5年で発売されたHaskellの書籍で最も優れたものを紹介してください

274 :デフォルトの名無しさん:2024/01/12(金) 10:55:28.35 ID:cAhPSGjh.net
オワコン

275 :デフォルトの名無しさん:2024/02/29(木) 01:38:01.78 ID:d2gqoSk4.net
windowsにインストールできんみたいだなcabalがエラー?
まあwindowsでやるなってことだな

276 :デフォルトの名無しさん:2024/03/03(日) 23:47:35.89 ID:9XAeTkis.net
モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果

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

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

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

という結論に至った。

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

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

そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。

277 :デフォルトの名無しさん:2024/03/04(月) 00:46:59.53 ID:XMYw3zR0.net
箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する

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

ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな

278 :デフォルトの名無しさん:2024/03/04(月) 01:02:22.82 ID:vyClhVzf.net
ふーむ。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)

そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。

279 :デフォルトの名無しさん:2024/03/04(月) 01:22:40.61 ID:XMYw3zR0.net
doの場合は1行ごとに新しい箱が作られてる
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される

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

数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな

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(数学)の外で初期化される変数とも考えられる。

82 KB
新着レスの表示

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

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★