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/
504 名前:デフォルトの名無しさん mailto:sage [2017/05/18(木) 17:35:00.25 ID:znop8OGf.net] force自体は何も特別では無くて遅延評価される 但し、force関数の評価時に本来はWHNFまでしか評価しない状況でもNFまで完全評価するって感じか
505 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 05:58:24.02 ID:7XmC+xMs.net] faithandbrave.hateblo.jp/entry/20111201/1322718742 GADTs拡張で、空でないリストを前提にコーディングできるみたいですけど、 これって、静的に空でない事が判明してないと呼び出せないんですか? 空か入ってるか判らないリストについては使えないってこと? 凄い使いにくそう
506 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 06:15:33.02 ID:eorHP7jS.net] NonEmptyは何かしらのモデリングを行うときにパラメータが非空リストであるといった内部で生じる条件を明に扱えるようにするためのものかと思ってる インポートした関数をつなぎ合わせるだけの部分で便利なものではない
507 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:25:30.00 ID:SgRoQNx5.net] printf関数は副作用のある出力関数じゃなくて、フォーマット済みの文字列返すだけの副作用のない関数にして欲しかった。。。
508 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:29:29.96 ID:1KTJ7Tkv.net] sprintfよろ
509 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:59:49.62 ID:SgRoQNx5.net] 本当、それ欲しい->sprintf
510 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 19:27:54.16 ID:3Ne2dZP6.net] import Text.Printf genMsg :: String -> String genMsg name = printf "Hello, %s-san!" name main :: IO () main = do name <- getLine putStrLn $ genMsg name
511 名前:デフォルトの名無しさん mailto:sage [2017/05/2
] [ここ壊れてます]
512 名前:0(土) 20:25:36.74 ID:HYrvvmg5.net mailto: ん? もしかしてread関数みたく型指定したらいけるって事け? テキストに行番号振るナンバリング関数で数字と文字列のタプル受け取って文字列返すラムダ式をconcat[show x,str]から書き換えたらエラー出たんだけど、型指定で行けるなら再挑戦して見るかな。。。 [] [ここ壊れてます]
513 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 20:37:45.54 ID:/vBlyS11.net] printfはほんと実装どうなってんのって感じ
514 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 20:41:46.24 ID:HYrvvmg5.net] 実装自体はHoogleで調べたら見れるけど、見ても分からんかった記憶がある。
515 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 21:15:44.41 ID:ZfDONXvK.net] a=>PrintfArg、b=>PrintfTypeのとき、 String -> bはPrintfTypeである a -> bもPrintfTypeである StringもPrintfTypeである IO ()もPrintfTypeである …を繋ぐと動くんだったかな
516 名前:デフォルトの名無しさん [2017/05/21(日) 06:36:57.09 ID:YZtqITyu.net] 型指定で行けたわ。 >>504 thanks!! import System.Environment import Text.Printf -- 数値型を文字列型に変換して文字列の頭に追加 consNum::(Int,String) -> String consNum (x,s) = printf "%4d:%s" x s -- 文章の行ごとに番号を振る numbering = unlines.(map consNum).(zip [1..]).lines -- ファイル名と内容(行番号付き)のタプルを作る zipFile_Content f = (zip f).map numbering -- ファイル名とファイルの内容を表示 putFile_Content (f,c) = printf "%s\n%s" f c main = do args <- getArgs -- コマンドから与えられたファイルのリストを受け取る cs <- mapM readFile args -- 全てのファイルの内容を読み込む mapM_ putFile_Content $ zipFile_Content args cs -- 全てのファイルのファイル名と内容(行番号付き)を表示
517 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 06:53:36.19 ID:YZtqITyu.net] この長さならputFile_Contentをラムダ式に戻しても良いな。
518 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 07:21:47.89 ID:NQzGLOFd.net] >>506 可変長引数の仕組みはこんな感じ class Count r where count :: Int -> r instance Count Int where count n = n instance (Count r) => Count (a -> r) where count n = const (count (n+1)) countArgs = count 0 main = print $ (countArgs 1 True "a" :: Int)
519 名前:デフォルトの名無しさん [2017/05/22(月) 19:08:38.92 ID:5O5zI7xX.net] >>511 これcountArgは型推論で型解決されてるの?
520 名前:デフォルトの名無しさん [2017/05/22(月) 22:52:47.32 ID:8pBxEsLa.net] 1 2 3みたいなコードのエラーメッセージを見るに 関数適用で引数分の関数だと推論されるんだろうね
521 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 10:24:38.23 ID:3W0XlzKr.net] Haskell - GHC for iOS : iOSアプリをHaskellで開発する blog.euphonictech.com/entry/2015/01/26/210101 GUIはObjective-Cに任せて中身はHaskell。 テーブルゲーム系は作りやすい言語だから、案外向いてるかも。。。
522 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 14:48:19.87 ID:f1Q/bDWm.net] Androidは?
523 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 17:25:53.49 ID:PJIONmxy.net] haskell androidでググったらトップで出るお。 Ubuntuなら最初の辺りは省けそう。 cabalじゃなくてstack入れた上でcabalへのパス通す方向で行った方が失敗少なそう。
524 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:23:10.81 ID:jde/WziY.net] ghc ios弄ってるよ。 7.8のghcは32bits版はghc公式のサイトにある。64bits のghc iosバイナリは公開されてない。 Appleのお達しにより64bitsを同梱しなければApp Storeにリリース出来ない。 HEADは試してないけど、3/27のソースではビルドは通った(ちなみにそのソースでは32bitsは素直に通らない)。 64bits のghc iosは現在活発にメンテされているようです。 俺は今は make binary-dist (つまり、ghc-....tar.xzを作るやつ)と、stackを直しています。 stackはcross compiler対応してないので、改造が必要なんだ。stack setup --os ios で一発インストールできるとこまで持っていきたい。 > cabalじゃなくてstack入れた上でcabalへのパス通す方向で行った方が失敗少なそう。 そのワークアラウンドは思いつかなかった。詳しくおしえてくれませんか。
525 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:32:03.75 ID:5hEoQuZK.net] え、cabalって書いてるところをstackに置き換えるけど、パス通す時cabalへのパスって言う、非常に単純で頭の悪いやり方だが。。。 単純にcabalが依存関係で止まる確率下がらないかなぁと。
526 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 22:54:19.25 ID:jde/WziY.net] >>518 なるほど。俺が勘違いしているのでなければ、 ipx.hatenablog.com/entry/2015/05/02/093634 のページのajhcをcabal install するときの話ですね。 うちの環境はMacなのでためせないのだけど、hackageにあるajhcのcabalファイルをみると依存パッケージのバージョン指定がほぼ無いので、ひょっとするとビルド通るかも。 少なくともstackの方がcabalよりは可能性高そうですね。 スマホ開発について、俺はajhcを使うアプローチは試してないのですが、他にもGHCjsを使ってjavascriptに落とした後、 PhoneGapとかで埋め込む、って手もありそうです。
527 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 00:32:17.87 ID:NrN6swuV.net] GHCjsなんてあったんだ。。。 fayってのはどこかのブログで見かけたけど。
528 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 21:57:13.55 ID:NmDuToTQ.net] 数値が書かれた文字列の大きさを比べたりソートするときってIntに変換しなくても大丈夫?
529 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 22:29:07.75 ID:yk/rwiNc.net] いける hackage.haskell.org/package/NaturalSort hackage.haskell.org/package/naturalcomp とか読んでみたら
530 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 22:31:16.66 ID:yk/rwiNc.net] ただし後者は…読めない
531 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 22:54:24.29 ID:YpWp2KMv.net] a="1000"とb="999"を比べるとして、 頭から3桁目までを比べるとbのほうが大きい けどaにはまだ続きがあってbには続きがない、だからaが大きい こんなアルゴリズムだったような
532 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 00:11:42.62 ID:izfj8ylF.net] >>521 辞書式順序になる。 “1000” < “200” < “30” < “4” みたいに。
533 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 00:33:59.08 ID:Q9+DetqO.net] >>521 変換しないと悪魔でも文字列としてソートするよ? ["10","100","20"]
534 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 00:46:54.13 ID:ZBW/Sl3S.net] みんなありがとう read :: String -> Intって書くのがめんどくさくて楽したかっただけなんだ めんどくさがらずにちゃんとやるよ
535 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 01:31:24.27 ID:fGPRo4Tg.net] naturalcompを入れた場合、 Prelude> :m +Data.List Text.NaturalComp Prelude Data.List Text.NaturalComp> naturalComp "1000" "999" GT Prelude Data.List Text.NaturalComp> sortBy naturalComp ["1","99","1000","10","999","9"] ["1","9","10","99","999","1000"] だいたい思ったとおりになると思うが
536 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 09:09:45.17 ID:ob559wKW.net] >>527 ごめん。 >>522 に出てたの知らなかった。 >>522 のライブラリ使えば問題無いみたい。
537 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 11:03:59.19 ID:izfj8ylF.net] >>529 こんな簡単なことで外部ライブラリに依存とかしたくないでしょ
538 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 11:22:28.03 ID:jD8c7u6v.net] まあねぇ。 んじゃあ桁ごとにグループ分けして、それぞれをソートして、その後結合?
539 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 11:41:35.46 ID:XfbQ4lvY.net] >>530 俺は大いに依存(利用)して問題ないと思う。 勉強も兼ねてるなら自作を勧めるが。
540 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 13:06:15.57 ID:jD8c7u6v.net] 昔のHaskellの(1+n)形式の引数復活しないかな。。。 代数的データ型で自然数作ったりの時、普通の関数だとこう。みたいな整合性が取れないのがね。。。 type Nat = Succ(Nat) | Zero dec (succ(n)) = n dec(Succ(Zero)) >Zero dec (1 + n) = n dec 1 >0
541 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 14:02:18.77 ID:XfbQ4lvY.net] >>533 どんな時に代数的データ型で自然数を作るの?
542 名前:デフォルトの名無しさん mailto:sage [2017/05/25(木) 18:02:15.54 ID:KkJBSxnE.net] お遊びの時。 だから無くても困らないけど、昔あったの知ってると復活しないかな。。。と。
543 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 00:23:29.72 ID:lBtW1IaY.net] {-# LANGUAGE NPlusKPatterns #-}
544 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 02:18:52.31 ID:NvS9muX6.net] 何!! 復活の呪文あるんか!!
545 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 03:26:42.35 ID:NvS9muX6.net] dec (n + 1) = n は通るけど dec (1 + n) = n は通らない。。。 なんかモヤモヤ。。。
546 名前:デフォルトの名無しさん [2017/05/26(金) 06:58:01.57 ID:57q7qnDF.net] Haskellerこっわ https://twitter.com/ncaq/status/867682756821565441
547 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 07:45:17.70 ID:npmNm3qp.net] NPlusK ゆうとるやろが
548 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 08:02:14.29 ID:BGbWYOFh.net] だからKPlusNを追加したら、ンなもんねーよって怒られた。。。 あるだけ有難いけどね。
549 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 08:07:54.48 ID:BGbWYOFh.net] >>539 Haskell使いって入ってるだけで、コードも何も語ってないやん。 はてなのHaskellerは優秀で良い人ばかりだお。 おいらは優秀じゃないし、プログラミング自体からほとんど引退してるからやめたけど。
550 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 08:24:06.27 ID:KgVkYaTe.net] 突然の自分語り
551 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 09:52:10.14 ID:x3L8qn59.net] Haskellのプログラミングで金をもらう Haskellerなる人物に何人も合ったが、 精神科通いとかの頭のオカシイやつばっかだった。 たまたまなのかも知れんが。
552 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:07:05.22 ID:lBtW1IaY.net] 両方名うてのキチガイやないかw
553 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:08:41.81 ID:lBtW1IaY.net] ちなみにHaskellerがおかしいというよりは CS業界が全般に発達障害とキチガイに寛容なだけ
554 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:25:10.56 ID:NDbIiRhl.net] 東大京大
555 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 10:47:10.88 ID:NDbIiRhl.net] >>539 片方はGHCの機能追加してるガチ勢だぞ 単純な言語拡張も知らない分際でコード語ってないとかのたまってるやつ恥ずかしすぎる
556 名前:デフォルトの名無しさん mailto:age [2017/05/26(金) 11:08:43.28 ID:7I4ytZjC.net] fumieval知らないとかモグリにもほどがある 自称関数型コミュニティでは超有名人
557 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 11:51:40.04 ID:lBtW1IaY.net] >>548 >片方はGHCの機能追加してるガチ勢だぞ そうだっけ? なんかしょうもない型クラスのインスタンス追加して喜んでた記憶しかないわ
558 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 12:25:49.52 ID:npmNm3qp.net] なにかHaskellにはそういう魔力めいた魅力でもあるのでしょうか
559 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 14:22:36.33 ID:ck4pDWmC.net] 関数脳になるとHaskellが癖になるのは確か。 オブジェクト指向のメソッドチェーンも入力->出力の連鎖で、関数型と同じなんだけど、ループや分岐も再帰やパターンマッチで書くから、より入力->出力に専念出来る。 思考がシンプルになる。 オブジェクト指向も思考をシンプルにする事を目指してるけど、クラス作る側とクラス使う側で大きな溝が出来てしまった。
560 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 16:33:50.74 ID:kKmQOK+/.net] 良くも悪くも変人しかHaskellなんて覚えようと思わないからじゃないかな 明らかに文法が異質だもの 多分みんな人生で何度か「変わってるね」って言われたことあるはず
561 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 17:33:52.44 ID:ZKqulABJ.net] 変わってると言えば否定しないけど、どの言語にもおいらみたいなのは一部居るんじゃないかな。 強いて言えばPythonやRubyにさえも挫折したおいらがHaskellで色々書けるようになって、書けるようになってからはPythonやRubyでも書けるようになって、Cでも書けるようにもなった。 例えばRubyのeach_slice相当の関数はHaskellに存在しない。 (Hoogleで調べても無かった) でも、動きを理解さえすればすぐに同じ動きの関数が書けた。 PythonやRubyは基本が手続き型言語だから、ライブラリを知らないとか、ライブラリに存在しない時に急に難しくなる。 おいらみたいに、LLでさえ手続き型言語で挫折した人がHaskellで出来るようになって、はしゃいでるとかは有るかもね。
562 名前:デフォルトの名無しさん [2017/05/26(金) 17:41:46.50 ID:57q7qnDF.net] 例の包丁Haskellerもそうだが、使っている奴は厨二病患者が多い 本当に厨二心をくすぐる言語なんだよ… OCamlメインの俺としては変なのがこっちに吸われていて助かる
563 名前:デフォルトの名無しさん [2017/05/26(金) 18:45:55.29 ID:ZQcANW7U.net] 変数も引数なしの値を返す関数。 a = 1 モナドもセクションにすればただの関数。 import System.Environment slice n xs | length xs < n || n <= 0 = [] slice n xs = ys:slice n zs where (ys,zs) = splitAt n xs main = (>>=) getArgs (print.slice 2) そういう意味で、mainすらも引数なしでプログラムの結果を返す関数。 全てが関数と型と値だけで考えられる。 厨二で上等。 一貫した考えが素晴らしいね。 煩わしさがない。
564 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 18:49:06.98 ID:sZfcErOL.net] なぜ自分は変じゃないと思えるのか……
565 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 18:49:10.19 ID:ulIxfp/C.net] OCamlはラクダだもんな。厨二病もクソもないw OcamlとかClojureはコードが丸い印象。Haskellは何か尖ってるよね。
566 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 18:50:59.74 ID:40xXL869.net] コメントが (* *) だからさ
567 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 19:01:21.32 ID:ZQcANW7U.net] >>557 え、否定しないって言ってるじゃん。 認めてるじゃん。
568 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 19:40:17.16 ID:xBragGUI.net] >>556 セクションは部分適用した二項演算子のことだぞ
569 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 20:51:35.80 ID:ovKX6RUR.net] あれ、どっちもセクションじゃ無かったっけ?と久しぶりに調べたら。。。 前置き形式?で良いのかな? これは済まんかった。
570 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:07:05.78 ID:lBtW1IaY.net] >>553 >良くも悪くも変人しかHaskellなんて覚えようと思わないからじゃないかな >明らかに文法が異質だもの ML系のワリと平凡な文法なんだけどね
571 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:28:16.56 ID:TC/C61F7.net] 変な文法と言えばPrologとかJ言語とか
572 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:36:15.75 ID:ovKX6RUR.net] >>558 OCamlもHaskellも同じML系なのにどうしてそう感じたんだろう? おいらみたいな使ってるやつの印象ってだけだったり? おいらみたいなのは少数派だよ。 声が大きいから、たくさん居るように感じるだけ。
573 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 21:41:20.55 ID:0YCuYapQ.net] すみません、質問です f :: a -> b と g :: a -> c があったときに \x -> (f x, g x) に相当する関数はライブラリに用意されてますか?
574 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:01:30.73 ID:ovKX6RUR.net] >>564 Jは聞いた事はあっても触った事すらないので何とも言えないが、Prologは昔の関数型言語の本では次世代言語として紹介されてたな。 実際触って見て可能性自体は感じるんだが、引数が大文字始まりじゃないとダメとか、計算式が=じゃなくてisとかが、とにかく愛せなかった。。。 Prolog得意の家系図関数も、Prologなら自動で関係を見つけるのをHaskellだと家系図をモデルとした仕様書いて、関係性のルール見抜いて仕様にして、そのまま家系図をデータ型に、関係性のルールを関数にする。 関数はルールの条件を箇条書きすればそのままパターンマッチの関数になる。 この辺が手続き型言語に対するアドバンテージであり、Prologに対して見劣りする所。 でも関係性のルールを見抜く作業と、関数作る作業が私にとっては楽しいのでそれで良い。
575 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:03:34.66 ID:EgTlEiWL.net] >>566 Control.Arrow の (&&&) だ。
576 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:07:24.39 ID:ovKX6RUR.net] >>566 型でHoogle検索して見ては? 探すより作った方が早そうだが。 dfunc f g x = (f x, g x)
577 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:16:23.90 ID:0YCuYapQ.net] >>569 (a -> b) -> (a -> c) -> a -> (b, c) とかで検索しても出なかったんですが 検索の仕方が悪かったのかな >>568 そんな関数があったんですね、勉強になりました ありがとうございます
578 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 22:34:36.00 ID:ovKX6RUR.net] >>568 演算子としての使い方分からなくてググったわw ほへー。。。 Arrowって基本こう使うのね。 こりゃHaskell分かりにくいってなる訳だよ。
579 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 23:18:50.05 ID:npmNm3qp.net] 型シグネチャから利用法読み解くのはIQモンスターでないと無理 設計者の思想を語ってもらわないと
580 名前:デフォルトの名無しさん mailto:sage [2017/05/26(金) 23:54:53.85 ID:nlWdhydN.net] 結局>>566 は解決したんかな。。。 用途に合わせて自作した方が早いし読みやすいと思うんだが。 格好いいからって過剰にArrow使ったりってのもなぁ。 もうそっちのが慣れてて早いんなら別だが。
581 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 00:13:32.94 ID:ChWjXNtT.net] データフローを記述するようなコードならArrow使えばいい
582 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 00:28:51.27 ID:Cj0QDtYS.net] そうね。 逆にxと関数のリスト二つ受け取って、(f x, g x)のリストを得るとかだと引数の順番好きに選べる普通の関数のが良いと思う。 dfunc x f g = (f x, g f) なりそう言うラムダ式をmapのリスト二つ版(仮にmap2)を作って渡せば良い。 結局>>566 が何をしたかったかによる。
583 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 01:16:44.64 ID:BlrnYoHB.net] Control.ApplicativeのliftA2を使って liftA2 (,) f g でもいけるよ。
584 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 07:13:42.02 ID:BlrnYoHB.net] 昨日の事件について、意見を書いた anond.hatelabo.jp/20140515010237
585 名前:デフォルトの名無しさん [2017/05/27(土) 08:54:38.45 ID:pQ5DUsdI.net] >>539 頭悪い会話すぎて笑った
586 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 08:59:16.85 ID:ChWjXNtT.net] >>576 >liftA2 (,) f g あー、関数アプリカティブか。
587 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 10:15:02.70 ID:y8N3m0Nz.net] >>572 型だろうが思想だろうが同じこと コードを1行も書かなくても分かり合えるのはIQモンスターだけ
588 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 10:32:14.53 ID:C4ObyqB4.net] おまいらが楽する分Haskellコンパイラの 作成が激ムズになる件。
589 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 10:59:01.67 ID:y8N3m0Nz.net] >>573 格好いいからじゃなくて Monadはカリー化を過剰に使ってるからタプルを使わない だからタプルに関係のあるものはArrowの方に集まってくる
590 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 12:15:10.10 ID:yeXCnzln.net] >>582 そういう理由で使われてたのか 理論的にArrowベースのことやってるのかと思ってた
591 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 12:23:21.54 ID:Vkpp8Cst.net] >>533 succの逆はpredな デクリメントではない
592 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 13:39:14.00 ID:zKKPdOe3.net] ****sucking の逆教えてや
593 名前:デフォルトの名無しさん mailto:sage [2017/05/27(土) 16:44:16.35 ID:ectnCudZ.net] >>585 ****vomit
594 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 01:36:41.46 ID:i0C/srSl.net] ちょっ違うなVomit****だ
595 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 09:27:04.54 ID:s8SCebgh.net] -rw------- 1 root root 13796 5月 25 23:39 /usr/share/man/man1/cabal.1.gz ArchLinuxでcabalのmanが読めないのはなんかのいぢめですか?
596 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:11:13.15 ID:wvAEkP6f.net] リストのn番目の要素をaからbに変えたリストを返す関数とかないですかね? splitAtで分けてから加工してまた繋げればいいのかな
597 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 13:22:58.81 ID:Ga0OokE+.net] >>589 ilist というライブラリに Data.List.Index.setAt :: Int -> a -> [a] -> [a] という 質問そのものの関数があるよ。
598 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:35:00.08 ID:Rx3nBVE8.net] 一目、効率悪そう
599 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 22:10:57.08 ID:3aZpEfHH.net] 元のリストを破壊することなく新しいリストを作るからね 不特定多数から参照されるデータは破壊できないから効率が悪い 所有権がないと参照できないような仕組みがあれば良いのか
600 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 22:31:00.36 ID:A2iCvXLz.net] >>589 nとaと(x:xs)受け取ってnが0になったらxの代わりにaをcons(:)すればいい。 setAt _ _ [] = [] setAt 0 a (_:xs) = a:xs setAt n a (x;cs) = x:setAt (n - 1) a xs
601 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 23:05:39.10 ID:Ga0OokE+.net] >>593 それ、質問者の言う splitAt で分けてからっていう方法と同じ
602 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 23:14:43.47 ID:wvAEkP6f.net] >>590 >>593 ありがとうございます Data.IndexのsetAt関数の定義をそのまま使わせてもらおうと思います
603 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 23:23:12.14 ID:Rx3nBVE8.net] リストのコピーって、(既にある)リストの各要素の格納先と同じアドレスを指すポインタを新規アロケートしてく感じですか? それとも一々要素までをもコピーするんですか?
604 名前:デフォルトの名無しさん mailto:sage [2017/05/29(月) 00:33:15.43 ID:21264BYs.net] コピーしてたらリストの意味無いからアドレスを新しく指してるんだと思う。 でないと、ソートとかメモリ幾らあっても足りなくなる。