関数型プログラミング言語 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
603デフォルトの名無しさん
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はどういう関数型という想定?
673デフォルトの名無しさん
2017/06/13(火) 15:33:15.95ID:kWBme6H8 自分の間違いを認められず引くに引けなくなってるだけなんじゃないの
674デフォルトの名無しさん
2017/06/13(火) 18:11:35.28ID:XoC5HvTL675デフォルトの名無しさん
2017/06/13(火) 18:19:50.97ID:pvAx0DQv fは引数でもない外側のリストを無理やり拡張するのか……おぞましいな
そんな実装されたらHaskell見限るわ
そんな実装されたらHaskell見限るわ
676デフォルトの名無しさん
2017/06/13(火) 18:35:46.29ID:XoC5HvTL だよな。
だからこそmapとかの関数作りやすいのに、そんな変な機能将来に渡って欲しいとは思わん。
入力->出力が素直だからこその関数プログラミングだってのに。
欲しい最終データが手に入れば良いのに、>>668は手段と目的が逆転してんだよ。
だからこそmapとかの関数作りやすいのに、そんな変な機能将来に渡って欲しいとは思わん。
入力->出力が素直だからこその関数プログラミングだってのに。
欲しい最終データが手に入れば良いのに、>>668は手段と目的が逆転してんだよ。
677デフォルトの名無しさん
2017/06/13(火) 19:30:15.82 どうしてもそれができないときは、本当にそれが必要不可欠なのか、もう一度よく考えてみよう
678デフォルトの名無しさん
2017/06/13(火) 21:22:18.24ID:JgnP6kSF >>669
> ["a","b",f ["c","d"]]はどういう型で表現するのさ?
関数fの型によるけどその出力がStringなら["a","b",f ["c","d"]] の型はもちろん[String]だね。
>>674
> そもそもどんな型でも文字列が返ってくる以外は入れられない。
結局、今のHaskellでは、["a", "b", ["c", "d"]] のような表現はできないと言ってるだけね?
関数型言語としてなぜそんな表現力を制限するのか分からん。どういう場合に使いたくなるかは知らんが。
>>676
> 入力->出力が素直だからこその関数プログラミングだってのに。
入力->出力が素直ってどういうこと? 自然変換のことじゃないよね?www
関数プログラミングは入力->出力になってればそれで十分だと思うが
>>68
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
> となるような関数fはどのように書けるでしょうか
結局もとのこの問題について、“一般の関数型言語”でのfの不可能性をだれも論証できないのかな?
(要点さえ分かれば簡略でよいが)
> ["a","b",f ["c","d"]]はどういう型で表現するのさ?
関数fの型によるけどその出力がStringなら["a","b",f ["c","d"]] の型はもちろん[String]だね。
>>674
> そもそもどんな型でも文字列が返ってくる以外は入れられない。
結局、今のHaskellでは、["a", "b", ["c", "d"]] のような表現はできないと言ってるだけね?
関数型言語としてなぜそんな表現力を制限するのか分からん。どういう場合に使いたくなるかは知らんが。
>>676
> 入力->出力が素直だからこその関数プログラミングだってのに。
入力->出力が素直ってどういうこと? 自然変換のことじゃないよね?www
関数プログラミングは入力->出力になってればそれで十分だと思うが
>>68
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
> となるような関数fはどのように書けるでしょうか
結局もとのこの問題について、“一般の関数型言語”でのfの不可能性をだれも論証できないのかな?
(要点さえ分かれば簡略でよいが)
679デフォルトの名無しさん
2017/06/13(火) 21:34:21.04ID:BDZwTNDo 型は単に「欲しい最終データが手に入ればよい」っていうよりは
ある種の性質がコンパイル時に保証されてるってのがありがたい
エンバグも検出しやすい
他の言語だと[Any] なListがあったりするけど(例えばScala)
よくあんなの使うなーって思う
>>678
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
これはリテラルでこう書いてる以上、 fがどんな値を返そうと
左辺は要素が3のリストで右辺は要素が4のリストだから
パターンマッチに成功するわけない
ある種の性質がコンパイル時に保証されてるってのがありがたい
エンバグも検出しやすい
他の言語だと[Any] なListがあったりするけど(例えばScala)
よくあんなの使うなーって思う
>>678
> ["aa", "bb", f ["cc", "dd"] ] =
> ["aa", "bb", "cc", "dd"]
これはリテラルでこう書いてる以上、 fがどんな値を返そうと
左辺は要素が3のリストで右辺は要素が4のリストだから
パターンマッチに成功するわけない
680デフォルトの名無しさん
2017/06/13(火) 21:39:23.64ID:Qd0f53fz >>678
ここにいる人たちは俺もあんたも含めて誰も証明できないことは、
いままでの一連のレスですでに分かっているはず。
あんたの投げかけた議論に誰もあんたの望むようには応えられないことも分かっただろ。
あんたの話はhaskellという小さな枠組みを遥かに越えてるんだよ。
いい加減スレチだってことに気づこうよ。
頼むから、一般の関数型言語における可能性や証明の議論は大学でもっと頭のいいヤツらとしてくれ。
ここにいる人たちは俺もあんたも含めて誰も証明できないことは、
いままでの一連のレスですでに分かっているはず。
あんたの投げかけた議論に誰もあんたの望むようには応えられないことも分かっただろ。
あんたの話はhaskellという小さな枠組みを遥かに越えてるんだよ。
いい加減スレチだってことに気づこうよ。
頼むから、一般の関数型言語における可能性や証明の議論は大学でもっと頭のいいヤツらとしてくれ。
681デフォルトの名無しさん
2017/06/13(火) 21:43:22.47ID:RNIsqaqt 中途半端な数学屋なんて全然怖くないのに
数学系と聞いて逃げるHaskellプログラマ大杉
数学系と聞いて逃げるHaskellプログラマ大杉
682デフォルトの名無しさん
2017/06/13(火) 23:14:18.88ID:qhE8awpR とりあえずこんなもんでどう?
https://ideone.com/wMOghJ
https://ideone.com/wMOghJ
683デフォルトの名無しさん
2017/06/13(火) 23:32:43.89ID:qhE8awpR どうせならFoldableにすりゃよかったな
ま、いっか
ま、いっか
684デフォルトの名無しさん
2017/06/13(火) 23:59:28.85ID:pYqK9vAB Haskell の枠組みにとらわれないなら、自分専用関数型言語の
文字列リテラルを 682 が示した Nest みたいに自由に定義すればいいもんな
これで解決だ
文字列リテラルを 682 が示した Nest みたいに自由に定義すればいいもんな
これで解決だ
685デフォルトの名無しさん
2017/06/14(水) 00:01:03.56ID:ZT/uD64c ideoneやpaiza.ioのようにhaskellコードのコンパイルと実行を同時にしてくれるようなローカルアプリはありますか?
補完とかはなくてもいいですし、exeも生成しなくていいのですが
補完とかはなくてもいいですし、exeも生成しなくていいのですが
686デフォルトの名無しさん
2017/06/14(水) 00:24:00.03ID:VydZF3sS ["aa","bb",f["cc","dd"]]=["aa","bb","cc","dd"]なるfが存在しないことは、
チャーチ・ロッサー性で説明できる。
チャーチ・ロッサー性は、簡単に言うと、計算の順番を変えても
最終的な計算結果が変わることが無いという性質。
もし上記のようなfがあるとすると、以下の2つの式の計算結果が同じでなければならない。
なぜなら、これら2つの式は、一番内側のfを先に計算するかどうかの違いしかないから。
null(tail(tail(tail ["aa","bb",f["cc","dd"]])))
null(tail(tail(tail ["aa","bb","cc","dd"])))
しかし、計算すればわかるが、上はtrueで下はfalseになるので矛盾する。
よってfは存在し得ない。
本当は、型なしラムダ計算に落としこんでからやる必要があるけど、
(型なしラムダ計算にチャーチ・ロッサー性があることは証明済み)
骨子としてはこんな感じ。
チャーチ・ロッサー性で説明できる。
チャーチ・ロッサー性は、簡単に言うと、計算の順番を変えても
最終的な計算結果が変わることが無いという性質。
もし上記のようなfがあるとすると、以下の2つの式の計算結果が同じでなければならない。
なぜなら、これら2つの式は、一番内側のfを先に計算するかどうかの違いしかないから。
null(tail(tail(tail ["aa","bb",f["cc","dd"]])))
null(tail(tail(tail ["aa","bb","cc","dd"])))
しかし、計算すればわかるが、上はtrueで下はfalseになるので矛盾する。
よってfは存在し得ない。
本当は、型なしラムダ計算に落としこんでからやる必要があるけど、
(型なしラムダ計算にチャーチ・ロッサー性があることは証明済み)
骨子としてはこんな感じ。
687デフォルトの名無しさん
2017/06/14(水) 00:35:10.46ID:Ei72hKB9 要するにLispのマクロの ,@ みたいな展開をしたいってことか?
688デフォルトの名無しさん
2017/06/14(水) 02:36:17.24ID:jR7LtVt0 >> 683
まあ、こういうデータ構造なんか既視感あるよなと思ったら、リストじゃなくてツリーだよね
つうか Data.Tree がまんまそれ
まあ、こういうデータ構造なんか既視感あるよなと思ったら、リストじゃなくてツリーだよね
つうか Data.Tree がまんまそれ
689デフォルトの名無しさん
2017/06/14(水) 05:34:36.84690デフォルトの名無しさん
2017/06/14(水) 09:21:04.82ID:Zur2LRZk >>678
>関数fの型によるけどその出力がStringなら["a","b",f ["c","d"]] の型はもちろん[String]だね。
そこまで分かってて、f ["c","d"]が単一のStringにならざるを得ない。
つまり
["a","b","c","d"]
ではなく、
["a","b","cd"]
の様な単一の値としてしか返りようがないって分かるだろ。
あれか、複数の値を返せってか。
従来の値が欲しい方はどうすんだよ。
>関数fの型によるけどその出力がStringなら["a","b",f ["c","d"]] の型はもちろん[String]だね。
そこまで分かってて、f ["c","d"]が単一のStringにならざるを得ない。
つまり
["a","b","c","d"]
ではなく、
["a","b","cd"]
の様な単一の値としてしか返りようがないって分かるだろ。
あれか、複数の値を返せってか。
従来の値が欲しい方はどうすんだよ。
691デフォルトの名無しさん
2017/06/14(水) 09:53:35.84ID:dwFQOh88 >>679
> 他の言語だと[Any] なListがあったりするけど(例えばScala)
> よくあんなの使うなーって思う
その例は極端すぎる。Anyは論外。型の否定と同じ。(Scalaも推奨はしてないと思うが)
> fがどんな値を返そうと左辺は要素が3のリストで
ふつうに考えてそうだよね。
そこを以下のように暗算して、できるかと思っちゃった。
f[x, y] = x : [y] とすると、
[a, b, f[c, d]] = a : b : (c : [d]) = a : b : (c : d : []) = a : b : c : d : [] = [a, b, c, d]
>>680
というわけで、ここは俺が暗算で頭の体操してミスってた。
優しく拒否してもらったがスマンw
>>686
> ["aa","bb",f["cc","dd"]]=["aa","bb","cc","dd"]なるfが存在しないことは、
> チャーチ・ロッサー性で説明できる。
折角だが今の件はチャーチ・ロッサー性(合流性)は関係ないと思う。
合流性以前の到達性が問題なので。
> 他の言語だと[Any] なListがあったりするけど(例えばScala)
> よくあんなの使うなーって思う
その例は極端すぎる。Anyは論外。型の否定と同じ。(Scalaも推奨はしてないと思うが)
> fがどんな値を返そうと左辺は要素が3のリストで
ふつうに考えてそうだよね。
そこを以下のように暗算して、できるかと思っちゃった。
f[x, y] = x : [y] とすると、
[a, b, f[c, d]] = a : b : (c : [d]) = a : b : (c : d : []) = a : b : c : d : [] = [a, b, c, d]
>>680
というわけで、ここは俺が暗算で頭の体操してミスってた。
優しく拒否してもらったがスマンw
>>686
> ["aa","bb",f["cc","dd"]]=["aa","bb","cc","dd"]なるfが存在しないことは、
> チャーチ・ロッサー性で説明できる。
折角だが今の件はチャーチ・ロッサー性(合流性)は関係ないと思う。
合流性以前の到達性が問題なので。
692デフォルトの名無しさん
2017/06/18(日) 12:36:58.87ID:P8yIezdD 配列xsとysと引数を2つ取る関数gがあって、
f g xs ys = map (\x -> map (g x) ys ) xs
となるような関数fってあったりしますか?
例えば
f (+) [1,2,3] [4,5,6] = [ [5,6,7], [6,7,8], [7,8,9]]
となるような関数です
f g xs ys = map (\x -> map (g x) ys ) xs
となるような関数fってあったりしますか?
例えば
f (+) [1,2,3] [4,5,6] = [ [5,6,7], [6,7,8], [7,8,9]]
となるような関数です
693デフォルトの名無しさん
2017/06/18(日) 12:50:16.34ID:aJwV86NO694デフォルトの名無しさん
2017/06/18(日) 12:56:47.67ID:P8yIezdD695デフォルトの名無しさん
2017/06/18(日) 15:28:29.26ID:sgvQsVTs >>692
f g xs ys = concatMap (¥x -> map (g x) ys ) xs
でいいなら(つまりリストを1段階潰していいなら)あるよ。
g <$> xs <*> ys
がその答え。
f g xs ys = concatMap (¥x -> map (g x) ys ) xs
でいいなら(つまりリストを1段階潰していいなら)あるよ。
g <$> xs <*> ys
がその答え。
696デフォルトの名無しさん
2017/06/18(日) 17:41:11.73ID:VE2N9ory >>692
zipWithに配列の配列渡せば行けるか?と書いてみた。
zipWith (map.(+)) [1,2,3] $ repeat [4,5,6]
うん。
素直に関数作った方がいいね。
リスト内包表記なら分かりやすいと思う。
f g xs ys = [map (g x) ys | x <- xs]
zipWithに配列の配列渡せば行けるか?と書いてみた。
zipWith (map.(+)) [1,2,3] $ repeat [4,5,6]
うん。
素直に関数作った方がいいね。
リスト内包表記なら分かりやすいと思う。
f g xs ys = [map (g x) ys | x <- xs]
697デフォルトの名無しさん
2017/06/18(日) 17:41:54.37ID:VE2N9ory x配列の配列
oリストのリスト
oリストのリスト
698デフォルトの名無しさん
2017/06/18(日) 22:40:07.66ID:3urB1Yg8 これで行けるよ。
f x = fmap . (. (:[])) . liftA2 x
f (+) [1,2,3] [4,5,6]
[[5,6,7],[6,7,8],[7,8,9]]
f x = fmap . (. (:[])) . liftA2 x
f (+) [1,2,3] [4,5,6]
[[5,6,7],[6,7,8],[7,8,9]]
699デフォルトの名無しさん
2017/06/19(月) 05:32:16.99ID:DP5W49kg そういう関数ってすでにある?って質問なのにオレオレ実装載せてく人たち…
700デフォルトの名無しさん
2017/06/19(月) 06:40:21.02ID:iu3OXdki しかも、質問者の実装が一番素直で分かりやすい
701デフォルトの名無しさん
2017/06/19(月) 07:45:05.62ID:f7LtpRLv 隙あらば実装
いや、プログラム板ではそれでいいんじゃないか。
いや、プログラム板ではそれでいいんじゃないか。
702デフォルトの名無しさん
2017/06/19(月) 10:22:09.65ID:Gx/WCs0N 組み込みの関数でラムダ式を隠蔽してしまうことには意味があるんじゃないか
ところで質問者の例だと結果が可換なのでそうじゃない例の方が良かったのでは
f (+) [1, 2, 3] [1, 3, 5] -> [[2,4,6],[3,5,7],[4,6,8]]
f (+) [1, 3, 5] [1, 2, 3] -> [[2,3,4],[4,5,6],[6,7,8]]
とか
ところで質問者の例だと結果が可換なのでそうじゃない例の方が良かったのでは
f (+) [1, 2, 3] [1, 3, 5] -> [[2,4,6],[3,5,7],[4,6,8]]
f (+) [1, 3, 5] [1, 2, 3] -> [[2,3,4],[4,5,6],[6,7,8]]
とか
703デフォルトの名無しさん
2017/06/19(月) 10:46:07.27ID:6iW/OLTz■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- 映画史上もっとも“スカッとする”結末の作品5選 [muffin★]
- 【悲報】秋元康「女性アイドルグループはもうオワコン。会いにいける男性アイドルグループを作る」 [455031798]
- ダイエット始めたんだけど500mすら泳ぐの辛い
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- マジレスで加湿器ってヤバいよなWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【訃報】日経平均先物逝く、円安株安債券安 [943688309]
