関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
548デフォルトの名無しさん
2017/05/26(金) 10:47:10.88ID:NDbIiRhl549デフォルトの名無しさん
2017/05/26(金) 11:08:43.28ID:7I4ytZjC fumieval知らないとかモグリにもほどがある
自称関数型コミュニティでは超有名人
自称関数型コミュニティでは超有名人
550デフォルトの名無しさん
2017/05/26(金) 11:51:40.04ID:lBtW1IaY551デフォルトの名無しさん
2017/05/26(金) 12:25:49.52ID:npmNm3qp なにかHaskellにはそういう魔力めいた魅力でもあるのでしょうか
552デフォルトの名無しさん
2017/05/26(金) 14:22:36.33ID:ck4pDWmC 関数脳になるとHaskellが癖になるのは確か。
オブジェクト指向のメソッドチェーンも入力->出力の連鎖で、関数型と同じなんだけど、ループや分岐も再帰やパターンマッチで書くから、より入力->出力に専念出来る。
思考がシンプルになる。
オブジェクト指向も思考をシンプルにする事を目指してるけど、クラス作る側とクラス使う側で大きな溝が出来てしまった。
オブジェクト指向のメソッドチェーンも入力->出力の連鎖で、関数型と同じなんだけど、ループや分岐も再帰やパターンマッチで書くから、より入力->出力に専念出来る。
思考がシンプルになる。
オブジェクト指向も思考をシンプルにする事を目指してるけど、クラス作る側とクラス使う側で大きな溝が出来てしまった。
553デフォルトの名無しさん
2017/05/26(金) 16:33:50.74ID:kKmQOK+/ 良くも悪くも変人しかHaskellなんて覚えようと思わないからじゃないかな
明らかに文法が異質だもの
多分みんな人生で何度か「変わってるね」って言われたことあるはず
明らかに文法が異質だもの
多分みんな人生で何度か「変わってるね」って言われたことあるはず
554デフォルトの名無しさん
2017/05/26(金) 17:33:52.44ID:ZKqulABJ 変わってると言えば否定しないけど、どの言語にもおいらみたいなのは一部居るんじゃないかな。
強いて言えばPythonやRubyにさえも挫折したおいらがHaskellで色々書けるようになって、書けるようになってからはPythonやRubyでも書けるようになって、Cでも書けるようにもなった。
例えばRubyのeach_slice相当の関数はHaskellに存在しない。
(Hoogleで調べても無かった)
でも、動きを理解さえすればすぐに同じ動きの関数が書けた。
PythonやRubyは基本が手続き型言語だから、ライブラリを知らないとか、ライブラリに存在しない時に急に難しくなる。
おいらみたいに、LLでさえ手続き型言語で挫折した人がHaskellで出来るようになって、はしゃいでるとかは有るかもね。
強いて言えばPythonやRubyにさえも挫折したおいらがHaskellで色々書けるようになって、書けるようになってからはPythonやRubyでも書けるようになって、Cでも書けるようにもなった。
例えばRubyのeach_slice相当の関数はHaskellに存在しない。
(Hoogleで調べても無かった)
でも、動きを理解さえすればすぐに同じ動きの関数が書けた。
PythonやRubyは基本が手続き型言語だから、ライブラリを知らないとか、ライブラリに存在しない時に急に難しくなる。
おいらみたいに、LLでさえ手続き型言語で挫折した人がHaskellで出来るようになって、はしゃいでるとかは有るかもね。
555デフォルトの名無しさん
2017/05/26(金) 17:41:46.50ID:57q7qnDF 例の包丁Haskellerもそうだが、使っている奴は厨二病患者が多い
本当に厨二心をくすぐる言語なんだよ…
OCamlメインの俺としては変なのがこっちに吸われていて助かる
本当に厨二心をくすぐる言語なんだよ…
OCamlメインの俺としては変なのがこっちに吸われていて助かる
556デフォルトの名無しさん
2017/05/26(金) 18:45:55.29ID:ZQcANW7U 変数も引数なしの値を返す関数。
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すらも引数なしでプログラムの結果を返す関数。
全てが関数と型と値だけで考えられる。
厨二で上等。
一貫した考えが素晴らしいね。
煩わしさがない。
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すらも引数なしでプログラムの結果を返す関数。
全てが関数と型と値だけで考えられる。
厨二で上等。
一貫した考えが素晴らしいね。
煩わしさがない。
557デフォルトの名無しさん
2017/05/26(金) 18:49:06.98ID:sZfcErOL なぜ自分は変じゃないと思えるのか……
558デフォルトの名無しさん
2017/05/26(金) 18:49:10.19ID:ulIxfp/C OCamlはラクダだもんな。厨二病もクソもないw
OcamlとかClojureはコードが丸い印象。Haskellは何か尖ってるよね。
OcamlとかClojureはコードが丸い印象。Haskellは何か尖ってるよね。
559デフォルトの名無しさん
2017/05/26(金) 18:50:59.74ID:40xXL869 コメントが (* *) だからさ
560デフォルトの名無しさん
2017/05/26(金) 19:01:21.32ID:ZQcANW7U561デフォルトの名無しさん
2017/05/26(金) 19:40:17.16ID:xBragGUI >>556
セクションは部分適用した二項演算子のことだぞ
セクションは部分適用した二項演算子のことだぞ
562デフォルトの名無しさん
2017/05/26(金) 20:51:35.80ID:ovKX6RUR あれ、どっちもセクションじゃ無かったっけ?と久しぶりに調べたら。。。
前置き形式?で良いのかな?
これは済まんかった。
前置き形式?で良いのかな?
これは済まんかった。
563デフォルトの名無しさん
2017/05/26(金) 21:07:05.78ID:lBtW1IaY564デフォルトの名無しさん
2017/05/26(金) 21:28:16.56ID:TC/C61F7 変な文法と言えばPrologとかJ言語とか
565デフォルトの名無しさん
2017/05/26(金) 21:36:15.75ID:ovKX6RUR >>558
OCamlもHaskellも同じML系なのにどうしてそう感じたんだろう?
おいらみたいな使ってるやつの印象ってだけだったり?
おいらみたいなのは少数派だよ。
声が大きいから、たくさん居るように感じるだけ。
OCamlもHaskellも同じML系なのにどうしてそう感じたんだろう?
おいらみたいな使ってるやつの印象ってだけだったり?
おいらみたいなのは少数派だよ。
声が大きいから、たくさん居るように感じるだけ。
566デフォルトの名無しさん
2017/05/26(金) 21:41:20.55ID:0YCuYapQ すみません、質問です
f :: a -> b と g :: a -> c があったときに
\x -> (f x, g x) に相当する関数はライブラリに用意されてますか?
f :: a -> b と g :: a -> c があったときに
\x -> (f x, g x) に相当する関数はライブラリに用意されてますか?
567デフォルトの名無しさん
2017/05/26(金) 22:01:30.73ID:ovKX6RUR >>564
Jは聞いた事はあっても触った事すらないので何とも言えないが、Prologは昔の関数型言語の本では次世代言語として紹介されてたな。
実際触って見て可能性自体は感じるんだが、引数が大文字始まりじゃないとダメとか、計算式が=じゃなくてisとかが、とにかく愛せなかった。。。
Prolog得意の家系図関数も、Prologなら自動で関係を見つけるのをHaskellだと家系図をモデルとした仕様書いて、関係性のルール見抜いて仕様にして、そのまま家系図をデータ型に、関係性のルールを関数にする。
関数はルールの条件を箇条書きすればそのままパターンマッチの関数になる。
この辺が手続き型言語に対するアドバンテージであり、Prologに対して見劣りする所。
でも関係性のルールを見抜く作業と、関数作る作業が私にとっては楽しいのでそれで良い。
Jは聞いた事はあっても触った事すらないので何とも言えないが、Prologは昔の関数型言語の本では次世代言語として紹介されてたな。
実際触って見て可能性自体は感じるんだが、引数が大文字始まりじゃないとダメとか、計算式が=じゃなくてisとかが、とにかく愛せなかった。。。
Prolog得意の家系図関数も、Prologなら自動で関係を見つけるのをHaskellだと家系図をモデルとした仕様書いて、関係性のルール見抜いて仕様にして、そのまま家系図をデータ型に、関係性のルールを関数にする。
関数はルールの条件を箇条書きすればそのままパターンマッチの関数になる。
この辺が手続き型言語に対するアドバンテージであり、Prologに対して見劣りする所。
でも関係性のルールを見抜く作業と、関数作る作業が私にとっては楽しいのでそれで良い。
568デフォルトの名無しさん
2017/05/26(金) 22:03:34.66ID:EgTlEiWL >>566
Control.Arrow の (&&&) だ。
Control.Arrow の (&&&) だ。
569デフォルトの名無しさん
2017/05/26(金) 22:07:24.39ID:ovKX6RUR570デフォルトの名無しさん
2017/05/26(金) 22:16:23.90ID:0YCuYapQ571デフォルトの名無しさん
2017/05/26(金) 22:34:36.00ID:ovKX6RUR572デフォルトの名無しさん
2017/05/26(金) 23:18:50.05ID:npmNm3qp 型シグネチャから利用法読み解くのはIQモンスターでないと無理
設計者の思想を語ってもらわないと
設計者の思想を語ってもらわないと
573デフォルトの名無しさん
2017/05/26(金) 23:54:53.85ID:nlWdhydN574デフォルトの名無しさん
2017/05/27(土) 00:13:32.94ID:ChWjXNtT データフローを記述するようなコードならArrow使えばいい
575デフォルトの名無しさん
2017/05/27(土) 00:28:51.27ID:Cj0QDtYS そうね。
逆にxと関数のリスト二つ受け取って、(f x, g x)のリストを得るとかだと引数の順番好きに選べる普通の関数のが良いと思う。
dfunc x f g = (f x, g f)
なりそう言うラムダ式をmapのリスト二つ版(仮にmap2)を作って渡せば良い。
結局>>566が何をしたかったかによる。
逆にxと関数のリスト二つ受け取って、(f x, g x)のリストを得るとかだと引数の順番好きに選べる普通の関数のが良いと思う。
dfunc x f g = (f x, g f)
なりそう言うラムダ式をmapのリスト二つ版(仮にmap2)を作って渡せば良い。
結局>>566が何をしたかったかによる。
576デフォルトの名無しさん
2017/05/27(土) 01:16:44.64ID:BlrnYoHB Control.ApplicativeのliftA2を使って
liftA2 (,) f g
でもいけるよ。
liftA2 (,) f g
でもいけるよ。
577デフォルトの名無しさん
2017/05/27(土) 07:13:42.02ID:BlrnYoHB 昨日の事件について、意見を書いた
http://anond.hatelabo.jp/20140515010237
http://anond.hatelabo.jp/20140515010237
578デフォルトの名無しさん
2017/05/27(土) 08:54:38.45ID:pQ5DUsdI >>539
頭悪い会話すぎて笑った
頭悪い会話すぎて笑った
579デフォルトの名無しさん
2017/05/27(土) 08:59:16.85ID:ChWjXNtT580デフォルトの名無しさん
2017/05/27(土) 10:15:02.70ID:y8N3m0Nz581デフォルトの名無しさん
2017/05/27(土) 10:32:14.53ID:C4ObyqB4 おまいらが楽する分Haskellコンパイラの
作成が激ムズになる件。
作成が激ムズになる件。
582デフォルトの名無しさん
2017/05/27(土) 10:59:01.67ID:y8N3m0Nz583デフォルトの名無しさん
2017/05/27(土) 12:15:10.10ID:yeXCnzln584デフォルトの名無しさん
2017/05/27(土) 12:23:21.54ID:Vkpp8Cst585デフォルトの名無しさん
2017/05/27(土) 13:39:14.00ID:zKKPdOe3 ****sucking の逆教えてや
586デフォルトの名無しさん
2017/05/27(土) 16:44:16.35ID:ectnCudZ >>585
****vomit
****vomit
587デフォルトの名無しさん
2017/05/28(日) 01:36:41.46ID:i0C/srSl ちょっ違うなVomit****だ
588デフォルトの名無しさん
2017/05/28(日) 09:27:04.54ID:s8SCebgh -rw------- 1 root root 13796 5月 25 23:39 /usr/share/man/man1/cabal.1.gz
ArchLinuxでcabalのmanが読めないのはなんかのいぢめですか?
ArchLinuxでcabalのmanが読めないのはなんかのいぢめですか?
589デフォルトの名無しさん
2017/05/28(日) 13:11:13.15ID:wvAEkP6f リストのn番目の要素をaからbに変えたリストを返す関数とかないですかね?
splitAtで分けてから加工してまた繋げればいいのかな
splitAtで分けてから加工してまた繋げればいいのかな
590デフォルトの名無しさん
2017/05/28(日) 13:22:58.81ID:Ga0OokE+591デフォルトの名無しさん
2017/05/28(日) 20:35:00.08ID:Rx3nBVE8 一目、効率悪そう
592デフォルトの名無しさん
2017/05/28(日) 22:10:57.08ID:3aZpEfHH 元のリストを破壊することなく新しいリストを作るからね
不特定多数から参照されるデータは破壊できないから効率が悪い
所有権がないと参照できないような仕組みがあれば良いのか
不特定多数から参照されるデータは破壊できないから効率が悪い
所有権がないと参照できないような仕組みがあれば良いのか
593デフォルトの名無しさん
2017/05/28(日) 22:31:00.36ID:A2iCvXLz >>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
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
594デフォルトの名無しさん
2017/05/28(日) 23:05:39.10ID:Ga0OokE+ >>593
それ、質問者の言う splitAt で分けてからっていう方法と同じ
それ、質問者の言う splitAt で分けてからっていう方法と同じ
595デフォルトの名無しさん
2017/05/28(日) 23:14:43.47ID:wvAEkP6f596デフォルトの名無しさん
2017/05/28(日) 23:23:12.14ID:Rx3nBVE8 リストのコピーって、(既にある)リストの各要素の格納先と同じアドレスを指すポインタを新規アロケートしてく感じですか?
それとも一々要素までをもコピーするんですか?
それとも一々要素までをもコピーするんですか?
597デフォルトの名無しさん
2017/05/29(月) 00:33:15.43ID:21264BYs コピーしてたらリストの意味無いからアドレスを新しく指してるんだと思う。
でないと、ソートとかメモリ幾らあっても足りなくなる。
でないと、ソートとかメモリ幾らあっても足りなくなる。
598デフォルトの名無しさん
2017/05/29(月) 00:49:02.28ID:21264BYs599デフォルトの名無しさん
2017/05/29(月) 01:12:03.29ID:21264BYs >>594
ちなみにsplitAtのやり方だとtake n zsの一番最後が更新したい場所になるので、initした上で++[a]++ysする必要がある。
setAt n a zs = init xs ++ [a] ++ ys
.........................where (xs, ys) = splitAt zs
Haskellでswap関数を作る7つの方法とか言うページ思い出したわ。。。
ちなみにsplitAtのやり方だとtake n zsの一番最後が更新したい場所になるので、initした上で++[a]++ysする必要がある。
setAt n a zs = init xs ++ [a] ++ ys
.........................where (xs, ys) = splitAt zs
Haskellでswap関数を作る7つの方法とか言うページ思い出したわ。。。
600デフォルトの名無しさん
2017/05/29(月) 01:13:40.94ID:21264BYs x splitAt zs
o splitAt n zs
o splitAt n zs
601デフォルトの名無しさん
2017/05/29(月) 06:42:46.07ID:0mYha2aU (++) (x:xs) ys = x : (++) xs ys
setAt n a (x:xs) = x : setAt (n-1) a xs
これを比較して前者が著しく遅いというのは嘘八百だな
setAt n a (x:xs) = x : setAt (n-1) a xs
これを比較して前者が著しく遅いというのは嘘八百だな
602デフォルトの名無しさん
2017/05/29(月) 06:59:53.71ID:Ny51uA9N603デフォルトの名無しさん
2017/05/29(月) 07:04:59.77ID:Ny51uA9N あ、逆か。
ysから始まってリストの先頭まで結合する。
出力する際には結局先頭から(:)伝いに辿って行くのでそう言う二度手間は避けた方がいい。
ysから始まってリストの先頭まで結合する。
出力する際には結局先頭から(:)伝いに辿って行くのでそう言う二度手間は避けた方がいい。
604デフォルトの名無しさん
2017/05/29(月) 07:20:56.98ID:Ny51uA9N ここで言う問題は、++ysそのものに害は無いけど、init xs ++ [a]で一旦先頭まで結合する処理が挟まってるってことね。
605デフォルトの名無しさん
2017/05/29(月) 07:35:03.41ID:0mYha2aU 実は++も右結合なんだよな
だから init xs ++ [a] ++ ys を (init xs ++ [a]) ++ ys と解釈するのは絶対ダメ
だから init xs ++ [a] ++ ys を (init xs ++ [a]) ++ ys と解釈するのは絶対ダメ
606デフォルトの名無しさん
2017/05/29(月) 07:35:56.11ID:Dokhp7Id setAt i x xs = let (ys,_:zs) = splitAt (i-1) xs in ys ++ x : xs
別にこういう定義にすればいい
でこれが遅いのは単にysの部分が2パスになるから
別にこういう定義にすればいい
でこれが遅いのは単にysの部分が2パスになるから
607デフォルトの名無しさん
2017/05/29(月) 07:39:00.53ID:Dokhp7Id608デフォルトの名無しさん
2017/05/29(月) 07:52:38.57ID:KKAtyjp+ 別にそれでも良い。
(++)は取り扱い次第で遅くなるってだけ。
(++)は取り扱い次第で遅くなるってだけ。
609デフォルトの名無しさん
2017/05/29(月) 15:03:33.95ID:2+2L65e+ というわけで、Sequenceです
610デフォルトの名無しさん
2017/05/29(月) 20:13:36.52ID:0mYha2aU showで文字列を作るのは平気なのにリストを作ると遅い遅いと言われる現象
数学的というより人間工学っぽい
数学的というより人間工学っぽい
611デフォルトの名無しさん
2017/05/29(月) 20:46:32.77ID:VknhjnwZ 出現頻度の問題では?
612デフォルトの名無しさん
2017/05/29(月) 21:27:07.82ID:0mYha2aU リストを使う頻度はIOを使う頻度と関係ありそう
IOを使う頻度は個人差が非常に大きい
IOを使う頻度は個人差が非常に大きい
613デフォルトの名無しさん
2017/05/29(月) 21:54:24.18ID:2+2L65e+ 初心者はモナド変換で躓く
614デフォルトの名無しさん
2017/05/30(火) 04:05:18.67ID:jc1LxPHe 例外処理のベストプラクティスがよく分からないなー
catchとかhandleでメイン処理、例外処理共に複数行になる時に、命令型のtry~catchみたいに無名関数での書き方ってどうなるんだろう
関数に切り出して呼ぶべし、なんかな?
どっちかだけ複数行ならそっちをdoにしたら良いっていうのは分るんだけど
catchとかhandleでメイン処理、例外処理共に複数行になる時に、命令型のtry~catchみたいに無名関数での書き方ってどうなるんだろう
関数に切り出して呼ぶべし、なんかな?
どっちかだけ複数行ならそっちをdoにしたら良いっていうのは分るんだけど
615デフォルトの名無しさん
2017/05/30(火) 05:14:25.23ID:jc1LxPHe パーレンで囲んだラムダは複数行いけるのな、見た目微妙だけど
616デフォルトの名無しさん
2017/05/31(水) 03:43:11.48ID:ML3xxqnu パーレン ()
ブラケット []
ブレース {}
ブラケット []
ブレース {}
617デフォルトの名無しさん
2017/06/03(土) 16:54:41.37ID:c6fwatRb f g n = gをn回合成した関数
みたいな関数のが欲しい
みたいな関数のが欲しい
618デフォルトの名無しさん
2017/06/03(土) 17:14:18.00ID:PKJ3i7am f = (!! n) . (iterate g)
619デフォルトの名無しさん
2017/06/03(土) 18:46:29.60ID:RovdiJA/620デフォルトの名無しさん
2017/06/03(土) 20:14:20.72ID:lhcAcbkl なんの問題もないと思うけど
そもそも同じ関数の反復適用が iterate なんだから
たいして抽象的でもない
そもそも同じ関数の反復適用が iterate なんだから
たいして抽象的でもない
621デフォルトの名無しさん
2017/06/03(土) 20:24:38.74ID:lhcAcbkl622デフォルトの名無しさん
2017/06/03(土) 20:28:35.64ID:lhcAcbkl iterative f n = foldl' (.) id . map (const f) $ [1..n]
とかでもいいか。そして iterate の方があきらかにわかりやすい。
とかでもいいか。そして iterate の方があきらかにわかりやすい。
623デフォルトの名無しさん
2017/06/04(日) 00:13:00.20ID:zJIyEnOK Cabalプロジェクトをstackでビルドできないだろうか?
cabalをグローバルにインストールしたくないんだ
cabalをグローバルにインストールしたくないんだ
624デフォルトの名無しさん
2017/06/07(水) 04:45:18.83ID:WOFnqCYP haskellで○×ゲーム作りました(頑張った私を褒めてください)
https://ideone.com/HHEWZv
https://ideone.com/HHEWZv
625デフォルトの名無しさん
2017/06/07(水) 08:42:17.54ID:gpLNw8mo 勝利判定なんとかならんのかw
626デフォルトの名無しさん
2017/06/07(水) 10:28:15.63ID:ZiMqMUeJ ゲームとかアルゴリズムとかどうでもよくて、ここが可愛いってのがポイントだろ?
('o':'o':'o': _ : _ : _ : _ : _ : _ :_) -> True
( _ : _ :'x': _ :'x': _ :'x': _ : _ :_) -> True
('o':'o':'o': _ : _ : _ : _ : _ : _ :_) -> True
( _ : _ :'x': _ :'x': _ :'x': _ : _ :_) -> True
627デフォルトの名無しさん
2017/06/07(水) 17:37:30.82ID:goEom//K 下は泣いてるミッフィーちゃんがクローン技術で失敗したような感じ
628デフォルトの名無しさん
2017/06/07(水) 22:12:38.86ID:FEgyIbtW 昔オセロ作ったけど、勝敗判定作るの忘れて延々パスし続けたわ
main =
void $ loop (player >=> ai) initBoard
where loop :: (Board -> IO Board) -> Board -> IO Board
loop f ib = loop f =<< f ib
main =
void $ loop (player >=> ai) initBoard
where loop :: (Board -> IO Board) -> Board -> IO Board
loop f ib = loop f =<< f ib
629デフォルトの名無しさん
2017/06/08(木) 02:06:09.79ID:3NnY77Pk >>624
同じゲームでも人によって設計や実装が全然違ってて面白いな
○×ゲーム - a-sanの日記 - haskell
https://haskell.g.hatena.ne.jp/a-san/20070115/p1
yasuabe blog: Haskell で三目並べ (2)
http://yasutech.blogspot.jp/2012/03/haskell.html
examples/TicTacToe.hs
http://projects.haskell.org/operational/examples/TicTacToe.hs.html
TicTacToe - HaskellWiki
https://wiki.haskell.org/TicTacToe
Tic-tac-toe in Haskell ・ GitHub
https://gist.github.com/billdozr/3071732
同じゲームでも人によって設計や実装が全然違ってて面白いな
○×ゲーム - a-sanの日記 - haskell
https://haskell.g.hatena.ne.jp/a-san/20070115/p1
yasuabe blog: Haskell で三目並べ (2)
http://yasutech.blogspot.jp/2012/03/haskell.html
examples/TicTacToe.hs
http://projects.haskell.org/operational/examples/TicTacToe.hs.html
TicTacToe - HaskellWiki
https://wiki.haskell.org/TicTacToe
Tic-tac-toe in Haskell ・ GitHub
https://gist.github.com/billdozr/3071732
630デフォルトの名無しさん
2017/06/11(日) 01:46:27.90ID:vYdG9fRO 開発環境としてleksahを入れてみたんですが、getLineのような標準入力が上手く動いてない気がします
実行しても入力出来るようにならず止まってしまうのですが、どうしたら入力出来るようになりますか?
実行しても入力出来るようにならず止まってしまうのですが、どうしたら入力出来るようになりますか?
631デフォルトの名無しさん
2017/06/11(日) 05:15:07.62ID:afWo9qoQ 今気づいた! leksah ってHaskell逆読みじゃん!
632デフォルトの名無しさん
2017/06/11(日) 12:39:02.23ID:hZZQfw5d 月並な命名をされた月並なアプリ
633デフォルトの名無しさん
2017/06/11(日) 16:52:05.15ID:3HVnXb8h >>68
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
> となるような関数fはどのように書けるでしょうか
めちゃ遅レスでなんだけど、f [x, y] = x : [y] ではだめなの?
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
> となるような関数fはどのように書けるでしょうか
めちゃ遅レスでなんだけど、f [x, y] = x : [y] ではだめなの?
634デフォルトの名無しさん
2017/06/11(日) 17:45:34.43ID:uxrAPwUF >>633
自分でちゃんとテストしてみた?
自分でちゃんとテストしてみた?
635デフォルトの名無しさん
2017/06/11(日) 22:56:26.81ID:3HVnXb8h >>634
リストの定義から明らかだと思うのでテストはしていない
リストの定義から明らかだと思うのでテストはしていない
637デフォルトの名無しさん
2017/06/11(日) 23:46:34.97ID:QTMXbNo3 驚き最小=テスト最小の法則
638デフォルトの名無しさん
2017/06/11(日) 23:54:46.06ID:3HVnXb8h >>636
何と何の型がどう合わない?
何と何の型がどう合わない?
639デフォルトの名無しさん
2017/06/12(月) 00:18:12.16ID:9+UoMkQw テンプレート?
640デフォルトの名無しさん
2017/06/12(月) 01:00:35.16ID:p/7lEol5 fを適用した結果の型が外側のリストの型と合わないってことでら
641デフォルトの名無しさん
2017/06/12(月) 01:38:16.98ID:0O7XnA5J たぶんshowの結果を評価する途中でunsafePerformIOすればいいんだな
642デフォルトの名無しさん
2017/06/12(月) 01:46:50.84ID:4tiz7p+p [ “aa”, “bb”, [“cc”,”dd”] ]
の型がどうやって合うと思ったのだろうか。
の型がどうやって合うと思ったのだろうか。
643デフォルトの名無しさん
2017/06/12(月) 02:20:04.97ID:DHBWzfrJ 邪悪なことはするな
644デフォルトの名無しさん
2017/06/12(月) 02:47:23.94ID:q+c9m0UT >>638
文字列型の中に文字列のリスト受け取って文字列を返す関数型が混じってる。
文字列型の中に文字列のリスト受け取って文字列を返す関数型が混じってる。
645デフォルトの名無しさん
2017/06/12(月) 09:44:54.21ID:4tNZZp5I646デフォルトの名無しさん
2017/06/12(月) 09:53:23.55ID:4tNZZp5I >>642
自己解決しますたw nilをきちんと入れてなかったみたい。
自己解決しますたw nilをきちんと入れてなかったみたい。
647デフォルトの名無しさん
2017/06/12(月) 17:07:14.08ID:uTHinYqc >>645
関数自体も値なのだが。。。
仮に返り値だとしても、文字列のリストにさらに文字列のリストが入ってるので型が合わない。
["a","b",["c","d"]]
="a":"b":["c","d"]:[] --["c","d"]が一つの値なので、文字列じゃない!!とエラーになる。
関数自体も値なのだが。。。
仮に返り値だとしても、文字列のリストにさらに文字列のリストが入ってるので型が合わない。
["a","b",["c","d"]]
="a":"b":["c","d"]:[] --["c","d"]が一つの値なので、文字列じゃない!!とエラーになる。
648デフォルトの名無しさん
2017/06/12(月) 17:22:26.96ID:pxvA8Fxv なんでここでnilの話になるんですか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「日本はパンダがいなくなる状況に直面するだろう」 中国メディア、専門家の見方伝える [♪♪♪★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★11 [樽悶★]
- 外国人の犯罪率は日本人の1.72倍 警察庁が短期滞在者除いた数字を参院内閣委で答弁★2 [七波羅探題★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ★2 [♪♪♪★]
- ひろゆき氏 高市首相の台湾有事発言 「日本が得たものあまりない。経済的なマイナスは明確に存在」 [冬月記者★]
- 【高市悲報】大暴落 [115996789]
- お前らが常備してるクスリなんや
- ジャンボ宝くじで10億当たる予定なんだが親戚からたかられない方法教えろ
- 16のヒッキー女に構って
- 24歳教師「5軒ハシゴして盗んだ車で飲酒運転して海に落ちたので別の車で仮眠を取りました」→クビ
- ネトウヨ「レアアースは日本でも採れるから輸入しなくてもOK!」 なお精製コストがバカ高く有害物質が大量に出ることは全く知らない模様 [314039747]
