関数型プログラミング言語 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
572デフォルトの名無しさん
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の話になるんですか?
649デフォルトの名無しさん
2017/06/12(月) 18:54:07.23ID:rXVGv3m5 どうしてもできないときは、それはする価値がないのだ
= 何かをしたくて、その手段としてそれをしようとしているが、実は何かはそれでなく別の方法でより自然に実現できることが多い。無理矢理その手段を開発する価値が本当にあるのか、もう一度考えてみよう
= 何かをしたくて、その手段としてそれをしようとしているが、実は何かはそれでなく別の方法でより自然に実現できることが多い。無理矢理その手段を開発する価値が本当にあるのか、もう一度考えてみよう
650デフォルトの名無しさん
2017/06/12(月) 20:01:13.71ID:4tiz7p+p GHCi で ["aa", "bb", ["cc", "dd"]] を評価してみれば一発だろうに
• Couldn't match expected type ‘Char’ with actual type ‘[Char]’
• In the expression: "cc"
In the expression: ["cc", "dd"]
In the expression: ["aa", "bb", ["cc", "dd"]]
• Couldn't match expected type ‘Char’ with actual type ‘[Char]’
• In the expression: "cc"
In the expression: ["cc", "dd"]
In the expression: ["aa", "bb", ["cc", "dd"]]
651デフォルトの名無しさん
2017/06/12(月) 21:30:08.56ID:4tNZZp5I652デフォルトの名無しさん
2017/06/12(月) 22:36:06.43ID:ejDn/VSN >>651
> 文字列または文字列のリストからなるリストというのはあり得るでしょう?
文字列というのが String 型を指していて、文字列のリストというのが [String] 型を指しているのであれば、
文字列または文字列のリストからなるリストという型は「あり得ません」。
なぜなら、Haskell には「型A または 型B」という型は存在しないからです。
(data T = D String | E [String] の型は T であって、D や E ではない)
> いまの場合、どうしてもできない証明はどうするんだろう?
なぜ「証明」を求めるのでしょうか。
Haskell だとこれはできないよと言われ、簡単な理由を説明された時、
あなたはいつもその証明を求めるのですか。
今回の問題に限って求めているのであれば、その理由を説明してください。
理由によっては、あなたが納得できる証明以外の説明ができるかもしれません。
というのも、できないことの証明を本当にしようとすると、かなり難しいからです。
きっと構文規則や意味論にまで話が及びます。
そんな証明できる人は稀ですし、できる能力があっても、したくないでしょう。
> それだけではその評価が本当に正しいかどうかが分からない
あなたの場合、「正しい」とは何を意味するのでしょうか。
>>650 が言っているのはきっと、GHCi で試してみれば「構文エラーであることが分かる」、
ということだと思いますよ。
それが正しいのか分からないというのは、GHC は信用できないということですか。
> 文字列または文字列のリストからなるリストというのはあり得るでしょう?
文字列というのが String 型を指していて、文字列のリストというのが [String] 型を指しているのであれば、
文字列または文字列のリストからなるリストという型は「あり得ません」。
なぜなら、Haskell には「型A または 型B」という型は存在しないからです。
(data T = D String | E [String] の型は T であって、D や E ではない)
> いまの場合、どうしてもできない証明はどうするんだろう?
なぜ「証明」を求めるのでしょうか。
Haskell だとこれはできないよと言われ、簡単な理由を説明された時、
あなたはいつもその証明を求めるのですか。
今回の問題に限って求めているのであれば、その理由を説明してください。
理由によっては、あなたが納得できる証明以外の説明ができるかもしれません。
というのも、できないことの証明を本当にしようとすると、かなり難しいからです。
きっと構文規則や意味論にまで話が及びます。
そんな証明できる人は稀ですし、できる能力があっても、したくないでしょう。
> それだけではその評価が本当に正しいかどうかが分からない
あなたの場合、「正しい」とは何を意味するのでしょうか。
>>650 が言っているのはきっと、GHCi で試してみれば「構文エラーであることが分かる」、
ということだと思いますよ。
それが正しいのか分からないというのは、GHC は信用できないということですか。
653デフォルトの名無しさん
2017/06/12(月) 22:39:18.30ID:4tiz7p+p >>651
https://paiza.io/projects/TpKm5_4fBEc7_YoKQIeKJQ
こういうのがお望み?
いずれにせよ List のデータコンストラクタ(:)を持ち出した >>633 は救済できんが。
https://paiza.io/projects/TpKm5_4fBEc7_YoKQIeKJQ
こういうのがお望み?
いずれにせよ List のデータコンストラクタ(:)を持ち出した >>633 は救済できんが。
654デフォルトの名無しさん
2017/06/12(月) 22:48:23.36ID:cqbaGfvU もしかして本当に欲しかったもの:
[["aa"], ["bb"], ["cc", "dd"]]
[["aa"], ["bb"], ["cc", "dd"]]
655デフォルトの名無しさん
2017/06/12(月) 22:49:39.74ID:4tiz7p+p656デフォルトの名無しさん
2017/06/12(月) 22:58:41.14ID:4tiz7p+p ちなみに、自分自身を要素の型とするかのような「ネストしたリスト」のようなデータ構造(というかinfnite typeのまがいもの)自体はときどき使いたくなるので簡単なライブラリを書いたことはある。そういやOCamlは オプショナルだが infnite type 扱えるんだったっけ??
657デフォルトの名無しさん
2017/06/12(月) 23:23:51.05ID:4tNZZp5I >>652
> なぜなら、Haskell には「型A または 型B」という型は存在しないからです。
「今のHaskell」には存在しないということね?
こっちは今のではなく本来のに興味があるので。
> Haskell だとこれはできないよと言われ、簡単な理由を説明された時、
> あなたはいつもその証明を求めるのですか。
簡単な理由でよいのだが、「今そうなってるから」は興味がない
> あなたの場合、「正しい」とは何を意味するのでしょうか。
> >>650 が言っているのはきっと、GHCi で試してみれば「構文エラーであることが分かる」、
> ということだと思いますよ。
さっきも言ったが、「今そうなってる」というのは 「正しい」とは異なる
> なぜなら、Haskell には「型A または 型B」という型は存在しないからです。
「今のHaskell」には存在しないということね?
こっちは今のではなく本来のに興味があるので。
> Haskell だとこれはできないよと言われ、簡単な理由を説明された時、
> あなたはいつもその証明を求めるのですか。
簡単な理由でよいのだが、「今そうなってるから」は興味がない
> あなたの場合、「正しい」とは何を意味するのでしょうか。
> >>650 が言っているのはきっと、GHCi で試してみれば「構文エラーであることが分かる」、
> ということだと思いますよ。
さっきも言ったが、「今そうなってる」というのは 「正しい」とは異なる
658デフォルトの名無しさん
2017/06/12(月) 23:32:25.99 方法が存在しないことの証明って悪魔の証明でないの?
できると主張する側ができることを証明しないとダメだよ
痴漢の言いがかりをつけられて、『痴漢していないことを証明しない限り有罪な』って裁判官に言われて納得できる?
できると主張する側ができることを証明しないとダメだよ
痴漢の言いがかりをつけられて、『痴漢していないことを証明しない限り有罪な』って裁判官に言われて納得できる?
659デフォルトの名無しさん
2017/06/12(月) 23:39:48.75ID:4tiz7p+p660デフォルトの名無しさん
2017/06/12(月) 23:42:32.96ID:4tiz7p+p [“aa”, [“bb”,”cc”]]
について Haskell2010 の構文規則をを充足するような
Haskellの型をつけてくれればいい
について Haskell2010 の構文規則をを充足するような
Haskellの型をつけてくれればいい
661デフォルトの名無しさん
2017/06/12(月) 23:43:46.21ID:ejDn/VSN662デフォルトの名無しさん
2017/06/12(月) 23:48:33.05ID:ejDn/VSN663デフォルトの名無しさん
2017/06/12(月) 23:48:35.55ID:PpCA4OTT 定義の証明をしろってことか
1の次の数は2であることを証明しろ的な
つまり1=2は間違いとは言えないのだ
1の次の数は2であることを証明しろ的な
つまり1=2は間違いとは言えないのだ
664デフォルトの名無しさん
2017/06/12(月) 23:59:06.10ID:4tiz7p+p665デフォルトの名無しさん
2017/06/13(火) 00:09:20.22ID:kWBme6H8 本来のHaskellってなんですか
666デフォルトの名無しさん
2017/06/13(火) 00:57:22.00ID:12SNvyK/ LISPベースのリスト
667デフォルトの名無しさん
2017/06/13(火) 11:30:18.72ID:OES2L0YQ >>651
それぞれのリストはあるけど、両方の型を持ったリストはない。
リストがいっぺんに受け取れる型は一つだけ。
ghciで拒否られたらそれまでじゃね?
何か作りたいわけじゃないって事?
下で将来のHaskellとか語ってるっぽいけど、今作れないでいつ作るの。
>>645見るに最終的に欲しいのは
["a","b","c","d"]
だろ?
f ["a","b"] ["c","d"]
= ["a","b"] ++ ["c","d"]
= ["a"] ++ "b":["c","d"]
= [] ++ "a":"b":["c","d"]
= ["a","b","c","d"]
じゃあダメなのか?
手段にこだわるより、目的果たす事考えようぜ。
それぞれのリストはあるけど、両方の型を持ったリストはない。
リストがいっぺんに受け取れる型は一つだけ。
ghciで拒否られたらそれまでじゃね?
何か作りたいわけじゃないって事?
下で将来のHaskellとか語ってるっぽいけど、今作れないでいつ作るの。
>>645見るに最終的に欲しいのは
["a","b","c","d"]
だろ?
f ["a","b"] ["c","d"]
= ["a","b"] ++ ["c","d"]
= ["a"] ++ "b":["c","d"]
= [] ++ "a":"b":["c","d"]
= ["a","b","c","d"]
じゃあダメなのか?
手段にこだわるより、目的果たす事考えようぜ。
668デフォルトの名無しさん
2017/06/13(火) 12:23:55.30ID:JgnP6kSF >>658
> 方法が存在しないことの証明って悪魔の証明でないの?
そんなことないよ。不可能性の証明なんて数学では普通にあるでしょ
>>661
> 特に断りがなければ今のHaskellについて質問したり語ったりしています。
スレタイは「今の」とはなっていない。「今の」「Haskell」に限るとつまらない
「関数型プログラミング言語」 の方がおもしろい。ここは「関数型プログラミング言語」がテーマと認識している。(俺はね)
「今の」「Haskell」は単にその一つ
> また、本来のHaskellとは何かも説明しておかないと、これまた話が合いません。
本来の関数型プログラミング言語程度の意味。それはみんな意識してるでしょ?
>>667
> それぞれのリストはあるけど、両方の型を持ったリストはない。
それは今のHaskellについた制限のようなものでしょ?
> f ["a","b"] ["c","d"]
> = ["a","b"] ++ ["c","d"]
> = ["a"] ++ "b":["c","d"]
> = [] ++ "a":"b":["c","d"]
> = ["a","b","c","d"]
>
> じゃあダメなのか?
それではもとの問題と違うし、スマンが興味わかんわ
> 方法が存在しないことの証明って悪魔の証明でないの?
そんなことないよ。不可能性の証明なんて数学では普通にあるでしょ
>>661
> 特に断りがなければ今のHaskellについて質問したり語ったりしています。
スレタイは「今の」とはなっていない。「今の」「Haskell」に限るとつまらない
「関数型プログラミング言語」 の方がおもしろい。ここは「関数型プログラミング言語」がテーマと認識している。(俺はね)
「今の」「Haskell」は単にその一つ
> また、本来のHaskellとは何かも説明しておかないと、これまた話が合いません。
本来の関数型プログラミング言語程度の意味。それはみんな意識してるでしょ?
>>667
> それぞれのリストはあるけど、両方の型を持ったリストはない。
それは今のHaskellについた制限のようなものでしょ?
> f ["a","b"] ["c","d"]
> = ["a","b"] ++ ["c","d"]
> = ["a"] ++ "b":["c","d"]
> = [] ++ "a":"b":["c","d"]
> = ["a","b","c","d"]
>
> じゃあダメなのか?
それではもとの問題と違うし、スマンが興味わかんわ
669デフォルトの名無しさん
2017/06/13(火) 13:10:39.07ID:s+JNd9SI >>668
将来も今も["a","b","c","d"]は[String]って型で表現できるけど、
["a","b",f ["c","d"]]はどういう型で表現するのさ?
こう表現出来るってのが無いと、ただ単に型に対する意識が低いだけのお馬鹿さんだよ?
将来も今も["a","b","c","d"]は[String]って型で表現できるけど、
["a","b",f ["c","d"]]はどういう型で表現するのさ?
こう表現出来るってのが無いと、ただ単に型に対する意識が低いだけのお馬鹿さんだよ?
670デフォルトの名無しさん
2017/06/13(火) 13:17:22.94ID:s+JNd9SI 大体、複数に型を纏めるんならタプル使えよ。
(["a","b"], f ["c","d"])
fが部分適用してない、値を返す関数なら結果の型が入るし、部分適用で関数としてタプルに入ってるなら何か受け取って何か返す関数の型がタプルにに入る。
(["a","b"], f ["c","d"])
fが部分適用してない、値を返す関数なら結果の型が入るし、部分適用で関数としてタプルに入ってるなら何か受け取って何か返す関数の型がタプルにに入る。
671デフォルトの名無しさん
2017/06/13(火) 14:08:02.45ID:pIEcxV3Y nilわすれてるってのはさ、
[a, b, c, d] と a : b : c : d : [] が等価ってことでさ、
この末尾の:[]を忘れたらあかんってことじゃないの?
[a, b, c, d] と a : b : c : d : [] が等価ってことでさ、
この末尾の:[]を忘れたらあかんってことじゃないの?
672デフォルトの名無しさん
2017/06/13(火) 14:26:42.82ID:JgnP6kSF >>669
そこのfはどういう関数型という想定?
そこのfはどういう関数型という想定?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★8 [BFU★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 高市首相が異例の“買春行為の罰則化の検討”に言及…世界では“買う側”に罰則を科すのが先進国のスタンダード ★2 [樽悶★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- 陸上自衛隊員(43)逮捕 赤坂ライブハウスの出演女性刺傷 殺人未遂容疑 [377482965]
- 鼻糞の残糞感がずっと消えない
- NHKニュースウオッチ9「日本側は対話にオープンな姿勢で安定した日中関係を築きたい考えなのに中国が意固地で糸口が見いだせない」 [904151406]
- 【ぺこ専🐰】なんG 兎田ぺこら突発配信実況スレ🏡【ホロライブ▶】
- 職場の女の子で抜くのが最高に興奮するよな
