関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/
探検
関数型プログラミング言語Haskell Part31©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/09/27(水) 02:33:08.70ID:2XAqPuH2
711デフォルトの名無しさん
2018/09/05(水) 02:13:16.34ID:sfHxtAx4 市場を作れ
712デフォルトの名無しさん
2018/09/05(水) 02:29:20.15ID:XBVLJBKG まずはHaskellの独壇場となるニッチ市場を開拓しないとな
どこかある?
どこかある?
713デフォルトの名無しさん
2018/09/05(水) 02:54:04.71ID:MYQmiXId 写像をドメイン、コドメインのみ与えて定義するのが簡単にできればちょっと優位にたてる分野はある
714デフォルトの名無しさん
2018/09/05(水) 17:02:07.24ID:7oDYcpPT >>713
もう少し詳しく教えて
もう少し詳しく教えて
715デフォルトの名無しさん
2018/09/05(水) 17:04:52.63ID:7oDYcpPT いまのHaskellには何が足らないのか。どんな分野で強みが活きるのか
716デフォルトの名無しさん
2018/09/05(水) 20:52:06.57ID:4jTvsEmq haskellでddd, cqrs, esのやり方を教えろください
717デフォルトの名無しさん
2018/09/07(金) 12:23:22.72ID:bXCAi+24 DDDが活きてくる(と見込める)ほどの規模の案件をhaskellで組むプロジェクトって凄いな
本格的にhaskellを導入してるんだね
本格的にhaskellを導入してるんだね
718デフォルトの名無しさん
2018/09/07(金) 18:05:22.36ID:jiol9czZ719デフォルトの名無しさん
2018/09/07(金) 19:04:41.60ID:2UbG8YkS >>718
DDD は Extensible Effect と Tagless final がよく合う
DDD は Extensible Effect と Tagless final がよく合う
720デフォルトの名無しさん
2018/09/07(金) 23:54:56.71ID:2UbG8YkS Haskellに欠けているのは中級者向けの書籍なのかも
721デフォルトの名無しさん
2018/09/08(土) 00:07:42.03ID:8HsWZyyw コンセプトは無茶苦茶面白いのに、肝心の実装が学級的で好き放題に流動的で恐ろしく無責任だからでは
722デフォルトの名無しさん
2018/09/08(土) 13:16:38.32ID:kGQ5zdyq >>721
そうなのか。具体的にはどのあたりが?
そうなのか。具体的にはどのあたりが?
723デフォルトの名無しさん
2018/09/10(月) 20:55:39.03ID:Tuk3Smzo Functional Design and Architecture
https://www.reddit.com/r/haskell/comments/6ck72h/functional_design_and_architecture/
素晴らしい、応援したい
https://www.reddit.com/r/haskell/comments/6ck72h/functional_design_and_architecture/
素晴らしい、応援したい
724デフォルトの名無しさん
2018/09/11(火) 06:18:11.27ID:xFzcqeSI 発売されたら買おうかな
725デフォルトの名無しさん
2018/09/11(火) 20:55:06.43ID:GxY7LXz/ ひゃっほおおおう! ビルド通ったぜ
stackageの可能な限り全部の総計2352パッケージを含むプロジェクトのビルドがやっと通った。
もはや ghci をいったん落として stack.yaml と cabal ファイルにパッケージを追記し... などという面倒をしなくても
ただ import するだけでそれが利用可能になる。
stackageの可能な限り全部の総計2352パッケージを含むプロジェクトのビルドがやっと通った。
もはや ghci をいったん落として stack.yaml と cabal ファイルにパッケージを追記し... などという面倒をしなくても
ただ import するだけでそれが利用可能になる。
726デフォルトの名無しさん
2018/09/15(土) 18:42:49.12ID:UVc1X0kV spacemacsのinteroでデバッグできてる人います?
replを立ち上げた後、デバッグしようとする(spc m d d)と、
No Haskell session associated with this debug buffer.
てエラーが出て、先に進まないです。
上記はhaskell-debug.elの中に出てくるエラー文で、
上で立ち上げたrepl(stack ghci)がsessionとして認識されてないのが原因?な気がしますが、力及ばずって感じです。
replを立ち上げた後、デバッグしようとする(spc m d d)と、
No Haskell session associated with this debug buffer.
てエラーが出て、先に進まないです。
上記はhaskell-debug.elの中に出てくるエラー文で、
上で立ち上げたrepl(stack ghci)がsessionとして認識されてないのが原因?な気がしますが、力及ばずって感じです。
727デフォルトの名無しさん
2018/09/16(日) 08:20:46.91ID:qJ8HI8bW728デフォルトの名無しさん
2018/09/16(日) 22:36:53.37ID:/Gv7qrCh すみません言語の話題から少し外れますが、
Windows10環境で
WinGHCiコンソール(ver 1.0.6)を使っているのですが
表示フォントをコンソラス等にしても
滑らかな文字表示がされず
メモ帳エディタの様な細いジャギー文字表示になります。
何か環境を弄ったり外部設定ファイルを書き換えたりして
外国のユーザー画面みたいな滑らか文字表示にする方法を
もしご存知でしたら教えて下さい。
Windows10環境で
WinGHCiコンソール(ver 1.0.6)を使っているのですが
表示フォントをコンソラス等にしても
滑らかな文字表示がされず
メモ帳エディタの様な細いジャギー文字表示になります。
何か環境を弄ったり外部設定ファイルを書き換えたりして
外国のユーザー画面みたいな滑らか文字表示にする方法を
もしご存知でしたら教えて下さい。
729デフォルトの名無しさん
2018/09/17(月) 17:50:28.07ID:tAsBi2aZ ポールフダックの音楽/Haskellの本が延期しまくりでつらみ
慰めに手を出してみたreact+reduxが割と面白くてjavascriptおじさんになりそう
慰めに手を出してみたreact+reduxが割と面白くてjavascriptおじさんになりそう
730デフォルトの名無しさん
2018/09/18(火) 15:50:49.67ID:zscrEVSG ハスケルミュージックスクールってやつ
なら無料で読めるドラフトバージョンのやつよんだけど糞つまらんよ
ほとんどがライブラリーの使い方の説明しか書いてない
なら無料で読めるドラフトバージョンのやつよんだけど糞つまらんよ
ほとんどがライブラリーの使い方の説明しか書いてない
731デフォルトの名無しさん
2018/09/18(火) 23:03:29.52ID:5HE01N22 その本です
定価で買うような本じゃなさそうですね…
定価で買うような本じゃなさそうですね…
732デフォルトの名無しさん
2018/09/18(火) 23:04:16.22ID:5HE01N22 遅れましたがありがとう。
733デフォルトの名無しさん
2018/09/19(水) 23:56:22.00ID:Pb0Tb1M0 木構造を表現するときの、「節」とか「葉」って、どう読みますか?
734デフォルトの名無しさん
2018/09/20(木) 12:01:53.37ID:7WHuQIEO ふし
よう
よう
735デフォルトの名無しさん
2018/09/20(木) 12:32:11.09ID:pCCtAD0d736デフォルトの名無しさん
2018/09/20(木) 15:10:54.04ID:x+bQf+aM 木をきと読むのならふし、は、
木をもくと読むのならせつ、よう
になる
木をもくと読むのならせつ、よう
になる
737デフォルトの名無しさん
2018/09/20(木) 19:43:33.25ID:lFTDGMpz 未評価オブジェクトの thunk の語源って何?
738デフォルトの名無しさん
2018/09/20(木) 20:48:30.00ID:xkI4bT5j739デフォルトの名無しさん
2018/09/20(木) 21:06:35.17ID:mjuqlfQO thunk you
740デフォルトの名無しさん
2018/09/20(木) 21:15:43.07ID:Qp++lnrA >>738
あんがと
あんがと
741デフォルトの名無しさん
2018/09/20(木) 22:10:00.23ID:mC+zbID1 カリー=ハワード同型
https://ideone.com/RSvVYo
https://ideone.com/RSvVYo
742デフォルトの名無しさん
2018/09/20(木) 22:11:42.05ID:92zkwrbu743デフォルトの名無しさん
2018/09/20(木) 22:24:45.13ID:92zkwrbu すみません、733です
音訓(違うかな?)いずれかに寄せるべきと感じていたからです
他の方々もありがとうございました
音訓(違うかな?)いずれかに寄せるべきと感じていたからです
他の方々もありがとうございました
744デフォルトの名無しさん
2018/09/20(木) 22:59:01.96ID:O5Bw6BVk >>743
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。
745デフォルトの名無しさん
2018/09/21(金) 11:17:49.00ID:pJEikkxu メモ化とスペースリークが本質的に同じもので、
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。
746デフォルトの名無しさん
2018/09/21(金) 16:12:03.67ID:kcyxUCNO 例えw
747デフォルトの名無しさん
2018/09/22(土) 03:54:02.44ID:iTw0SS1T >>744
path でええやん
path でええやん
748デフォルトの名無しさん
2018/09/22(土) 05:09:30.37ID:1NyjNSxI749デフォルトの名無しさん
2018/09/23(日) 15:45:23.97ID:f8u3bg2b Coerce知らなかった。newtypeを自動で剥がしてくれる便利なやつ
import Data.Semigroup
import Control.Arrow
import Data.Coerce
aggregate :: [Int] -> (Maybe Int,Int)
aggregate' :: [Int] -> (Maybe Int,Int)
aggregate = (fmap getMax *** getSum) . foldMap (Just . Max &&& Sum)
aggregate' = coerce . foldMap (Just . Max &&& Sum)
https://speakerdeck.com/konn/ben-dang-hasugoi-newtype
import Data.Semigroup
import Control.Arrow
import Data.Coerce
aggregate :: [Int] -> (Maybe Int,Int)
aggregate' :: [Int] -> (Maybe Int,Int)
aggregate = (fmap getMax *** getSum) . foldMap (Just . Max &&& Sum)
aggregate' = coerce . foldMap (Just . Max &&& Sum)
https://speakerdeck.com/konn/ben-dang-hasugoi-newtype
750デフォルトの名無しさん
2018/09/30(日) 08:19:13.93ID:0APHfRwQ リストの要素がすべて異なる場合はTrue、
一つでも同じものがあれば False を返す関数を作りたい。
私が思いつく限りでは、次の方法が効率的には最適解だと思うのだが、どうだろうか。
リストが Eq と Ord のインスタンスであるという制限をかけた上で、
まずリストをソートし、それから隣の要素同士で同値関係を調べる。
ちなみに、これは○○問題などと名前がついているのだろうか。
一つでも同じものがあれば False を返す関数を作りたい。
私が思いつく限りでは、次の方法が効率的には最適解だと思うのだが、どうだろうか。
リストが Eq と Ord のインスタンスであるという制限をかけた上で、
まずリストをソートし、それから隣の要素同士で同値関係を調べる。
ちなみに、これは○○問題などと名前がついているのだろうか。
751デフォルトの名無しさん
2018/09/30(日) 14:27:30.56ID:3FJv0aaM 名前をつけるとしたらグラフ○○かな
グラフ簡約のように木をグラフに変える問題
グラフ簡約のように木をグラフに変える問題
752デフォルトの名無しさん
2018/09/30(日) 14:28:16.49ID:fYmelBV3 なんでソートするん?
753デフォルトの名無しさん
2018/09/30(日) 14:56:02.92ID:HUnS5YBa ソートは不要だし、どの言語でもdictionary/mappingにして要素数見るだけの作業のような
754デフォルトの名無しさん
2018/09/30(日) 15:13:03.29ID:0APHfRwQ >>752
ソートすれば、隣同士の要素の同値関係を調べるだけでよくなるから。
n個の要素を持つ未ソートリストの場合、
リストの第0要素を第1要素と、第2要素と・・・第n要素と比較する。
次にリストの第1要素を第2要素と・・・第n要素と比較する。
とやって、結局 O(n^2) の計算量が必要になる。
ソートするなら O(n log n) で済む。
と思ったけど、オレ勘違いしてるかな。
すまん、修理に出したPCがまだ帰ってこず、
試して速度比較できる環境にないんだ。
ソートすれば、隣同士の要素の同値関係を調べるだけでよくなるから。
n個の要素を持つ未ソートリストの場合、
リストの第0要素を第1要素と、第2要素と・・・第n要素と比較する。
次にリストの第1要素を第2要素と・・・第n要素と比較する。
とやって、結局 O(n^2) の計算量が必要になる。
ソートするなら O(n log n) で済む。
と思ったけど、オレ勘違いしてるかな。
すまん、修理に出したPCがまだ帰ってこず、
試して速度比較できる環境にないんだ。
755デフォルトの名無しさん
2018/09/30(日) 15:14:19.07ID:0APHfRwQ756デフォルトの名無しさん
2018/09/30(日) 15:21:38.02ID:0APHfRwQ757デフォルトの名無しさん
2018/09/30(日) 16:45:52.09ID:e88wFP8G 一般的に同値関係とは推移律が成り立ってる関係のことを言うので
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という
758デフォルトの名無しさん
2018/09/30(日) 18:14:08.21ID:3FJv0aaM dictionary云々はハッシュ関数で非可逆圧縮してからバケットソートするようなもの
バケットソートはO(n)
バケットソートはO(n)
759デフォルトの名無しさん
2018/09/30(日) 19:44:34.07ID:0APHfRwQ760デフォルトの名無しさん
2018/10/02(火) 09:56:14.61ID:CXlZ46rN Arch LinuxのHaskellのリポジトリが
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる
761デフォルトの名無しさん
2018/10/02(火) 10:46:10.19ID:ckiYxteQ よく知らないけど公式じゃあかんの?
762デフォルトの名無しさん
2018/10/02(火) 11:02:45.56ID:CXlZ46rN そういう問題ではなく
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう
763デフォルトの名無しさん
2018/10/02(火) 19:43:32.30ID:TcTkE961 本邦では昨年、Qiitaでのアドベントカレンダーは、HaskellがGoについで投稿数が多かった。
764デフォルトの名無しさん
2018/10/05(金) 01:51:04.61ID:kIWl5j53 入門記事を読んだ人が入門記事を書いての繰り返しですやん。
765デフォルトの名無しさん
2018/10/05(金) 02:04:05.24ID:vYMMhlcW766デフォルトの名無しさん
2018/10/06(土) 18:21:22.11ID:nvkFLHfM ネットでは大手のHaskell導入報告が続いて沸いてるとこだがお前らどんだけ情弱だよ
767デフォルトの名無しさん
2018/10/06(土) 18:23:45.87ID:FAIH8E2E Haskell使ってはいけないような低学歴知恵遅れが
Haskellに興味をもってるからな
低学歴知恵遅れがHaskell触ってはいけない
ヤバイことがおきる
Haskellに興味をもってるからな
低学歴知恵遅れがHaskell触ってはいけない
ヤバイことがおきる
768デフォルトの名無しさん
2018/10/06(土) 18:45:45.19ID:iQB6eFVs サイモンペイトンジョーンズがFacebookいってたけどさ、
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか
769デフォルトの名無しさん
2018/10/06(土) 20:53:46.19ID:py9kgJld770デフォルトの名無しさん
2018/10/07(日) 02:27:45.21ID:cvc83VBz ツイ見ろ
771デフォルトの名無しさん
2018/10/07(日) 08:23:56.85ID:VWepfHKo 誰の?
772デフォルトの名無しさん
2018/10/09(火) 07:56:37.24ID:pc4ijCgO MonadIO は抽象度が高くて万能すぎ、オーバースペックだよ。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful
簡潔で分かりやすい。
こういうのパターンっていうのかな。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful
簡潔で分かりやすい。
こういうのパターンっていうのかな。
773デフォルトの名無しさん
2018/10/09(火) 19:53:39.57ID:ikZDMvLJ githubを見る限りではとても盛り上がっているとは・・・
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり
774デフォルトの名無しさん
2018/10/09(火) 22:29:07.16ID:1168jJnj なんてことないfizzbuzzもHaskellで書くと楽しくなっちゃうんだよな
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell
775デフォルトの名無しさん
2018/10/10(水) 00:27:00.44ID:mnDhwBuZ Haskellでfizzbuzzをやろうとすると「数値か文字を出力する関数ってどうやるんだ?」
みたいなところでつまづきがち
みたいなところでつまづきがち
776デフォルトの名無しさん
2018/10/10(水) 06:58:53.24ID:h0OQje2u >>772
似たようなことはpurescriptではデフォルト(だった?)
似たようなことはpurescriptではデフォルト(だった?)
777デフォルトの名無しさん
2018/10/10(水) 12:38:31.88ID:Gg6vIVej 数値を文字列型にすれば良い
778デフォルトの名無しさん
2018/10/11(木) 01:03:51.12ID:g6Q8mWEK779デフォルトの名無しさん
2018/10/11(木) 12:44:03.11ID:kgTYxXGo780デフォルトの名無しさん
2018/10/11(木) 22:20:09.94ID:BadrZ8Hx 結局は書く人本人が気持ちよくなる為の言語だね
パフォーマンスに優れるとかもないし
パフォーマンスに優れるとかもないし
781デフォルトの名無しさん
2018/10/12(金) 02:12:33.00ID:C3Ny8aXI >>779
あーやっぱこれだね〜
あーやっぱこれだね〜
782デフォルトの名無しさん
2018/10/12(金) 07:44:29.57ID:KfUOHFbE 遅延ストリームを扱うならHaskellは速い方だろう
fizzbuzzの規模じゃそれを採用する利点はわからないけど
fizzbuzzの規模じゃそれを採用する利点はわからないけど
783デフォルトの名無しさん
2018/10/12(金) 08:45:23.98ID:gMRT6HYK むしろ最速の言語になってほしい。
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」
784デフォルトの名無しさん
2018/10/12(金) 19:09:14.98ID:dVwqKDFL 「Haskellは参照透明性を保証するために、最適化を犠牲にした。
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」
785デフォルトの名無しさん
2018/10/12(金) 20:38:19.51ID:P1gVq1Zk purescriptってどうなん?
786デフォルトの名無しさん
2018/10/12(金) 20:52:35.33ID:gMRT6HYK787デフォルトの名無しさん
2018/10/13(土) 06:54:47.20ID:KKBwY8Qn コンパイラフレンドリーに記述したときの速度に概ね不満はないけどコードからパフォーマンスが予測しづらいのがね
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか
788デフォルトの名無しさん
2018/10/13(土) 07:37:36.01ID:dpKKSw3w789デフォルトの名無しさん
2018/10/13(土) 10:35:05.77ID:dM3fjinv 遅延評価だけでなくガベコレの遅さも問題視されるだろう(予測)
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが
790デフォルトの名無しさん
2018/10/13(土) 18:49:50.11ID:hDWVpOOe Haskellはコンパイルさえ通ればバグは滅多にないが通説になっているけど
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。
791デフォルトの名無しさん
2018/10/13(土) 20:07:33.53ID:H67rAYXW メモリがないならディスクを使えばいいかもね
ファイルに保存できた方が原因特定も楽だし
ファイルに保存できた方が原因特定も楽だし
792デフォルトの名無しさん
2018/10/13(土) 20:11:57.62ID:KKBwY8Qn 評価順序とスペースリークは他の言語にはないバグだから逆に増えてるところもある
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね
793デフォルトの名無しさん
2018/10/13(土) 20:39:20.93ID:H67rAYXW データベース的な仕組みだとスペースリークを放置しているやつが多い
某OSのレジストリとか
某OSのレジストリとか
794デフォルトの名無しさん
2018/10/15(月) 21:26:01.71ID:e5ZigS6A Nixってなに?
795デフォルトの名無しさん
2018/10/15(月) 22:33:00.01ID:eL3fUBCp くだらない質問で悪いけど質問させてほしい
Haskellでの優先順位について
・演算子の優先順位の記述はある
・関数適用の優先順位の記述はある
でも、関数の優先順位の記述が見当たらないんだけど(どっかに、左結合ってのはみた)
関数の優先順位はどうなるの?
要するに、かっこ付けの順番なんだけど
1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス
Haskellでの優先順位について
・演算子の優先順位の記述はある
・関数適用の優先順位の記述はある
でも、関数の優先順位の記述が見当たらないんだけど(どっかに、左結合ってのはみた)
関数の優先順位はどうなるの?
要するに、かっこ付けの順番なんだけど
1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス
796795
2018/10/16(火) 00:16:52.78ID:J1KdR+sZ 795だけど、質問がうまくまとまってない希ガス
演算子と関数というのがあるけど、演算子も関数と見なしていいんだよね
ていうことは、
まず、第一の疑問は
1.関数適用の優先順位が高いとして、沢山ある関数(演算子も含む)の中でどの順番で行うのか?
第二の疑問として
3.関数 の優先順位は何?
例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも
演算子と関数というのがあるけど、演算子も関数と見なしていいんだよね
ていうことは、
まず、第一の疑問は
1.関数適用の優先順位が高いとして、沢山ある関数(演算子も含む)の中でどの順番で行うのか?
第二の疑問として
3.関数 の優先順位は何?
例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも
797デフォルトの名無しさん
2018/10/16(火) 00:29:51.00ID:Y+LwBtWJ a b c d e fの並びは(((((a b) c) d) e) f)
このa,b,c,d,e,fが関数だとか値のバインドだとか関係ない
そういう話ではない?
このa,b,c,d,e,fが関数だとか値のバインドだとか関係ない
そういう話ではない?
798デフォルトの名無しさん
2018/10/16(火) 00:34:17.39ID:Y+LwBtWJ 演算子を関数としてみなすなら
compfunc = funcA . funcB (3 + 4)
は関数として展開して
compfunc = (.) funcA (funcB ((+) 3 4))
で
compfunc = (((.) funcA) (funcB (((+) 3) 4)))
だよね
compfunc = funcA . funcB (3 + 4)
は関数として展開して
compfunc = (.) funcA (funcB ((+) 3 4))
で
compfunc = (((.) funcA) (funcB (((+) 3) 4)))
だよね
799デフォルトの名無しさん
2018/10/16(火) 00:43:59.67ID:J1KdR+sZ >>797
それを真としすると
自分の理解では、a : funcA b:(.) c: funcB d:(3+4)となるけど、
実際の計算は(((((a b) c) d) e) f)とあってないと思う。
compfunc = funcA . funcB . funcC (3 + 4)の方が分かりやすかったかもしれないけど
関数合成は (funcA . (funcB . funcC)) (3+4)だから (つまり関数合成は右結合)
(((((a b) c) d) e) f)になってないと思う。 (関数というか、カリー化は左結合)
それを真としすると
自分の理解では、a : funcA b:(.) c: funcB d:(3+4)となるけど、
実際の計算は(((((a b) c) d) e) f)とあってないと思う。
compfunc = funcA . funcB . funcC (3 + 4)の方が分かりやすかったかもしれないけど
関数合成は (funcA . (funcB . funcC)) (3+4)だから (つまり関数合成は右結合)
(((((a b) c) d) e) f)になってないと思う。 (関数というか、カリー化は左結合)
800デフォルトの名無しさん
2018/10/16(火) 00:47:21.87ID:J1KdR+sZ801デフォルトの名無しさん
2018/10/16(火) 01:38:23.70ID:iR5P4NYU >>796
演算子と関数とは似ているように思うかもしれないがちゃんと区別したほうがいい
まず関数適用とは雑に言えば項の間の半角スペースのこと
関数とか定数とか(ただし演算子は除く)をスペースでくっつけるのが関数適用
その関数適用の結合はカッコを除いて最優先なので、特に全ての演算子に優先する
(結合の仕方は>>797の通り)
そして
(.) :: (b -> c) -> (a -> b) -> a -> c
は慣れないうちは紛らわしいが、単に関数を引数に取る2項演算子なので
(演算子として使う限りは)関数適用より優先順位が低い
うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む
演算子と関数とは似ているように思うかもしれないがちゃんと区別したほうがいい
まず関数適用とは雑に言えば項の間の半角スペースのこと
関数とか定数とか(ただし演算子は除く)をスペースでくっつけるのが関数適用
その関数適用の結合はカッコを除いて最優先なので、特に全ての演算子に優先する
(結合の仕方は>>797の通り)
そして
(.) :: (b -> c) -> (a -> b) -> a -> c
は慣れないうちは紛らわしいが、単に関数を引数に取る2項演算子なので
(演算子として使う限りは)関数適用より優先順位が低い
うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む
802デフォルトの名無しさん
2018/10/16(火) 01:48:57.45ID:R77VKNPD haskellの構文のBNFを見てみればいいんでない?
803デフォルトの名無しさん
2018/10/16(火) 03:22:14.15ID:q8KCyqRj 質問です。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。
804デフォルトの名無しさん
2018/10/16(火) 07:09:37.73ID:t1I/4hrX805デフォルトの名無しさん
2018/10/16(火) 14:35:49.92ID:4kzhBxnD >>804
あざっす❗
あざっす❗
806デフォルトの名無しさん
2018/10/16(火) 16:03:37.14ID:Y+LwBtWJ >>799
compfunc = funcA 1 2 . funcB 4 5 . funcC 5 6 $ funcD 7 8
とあったとき、まず演算子を越えずに関数適用
compfunc = ((funcA 1) 2) . ((funcB 3) 4) . ((funcC 5 ) 6) $ ((funcD 7) 8)
このあとで演算子の優先順位で計算
>自分の理解では、a : funcA b:(.) c: funcB d:( 3+4)となるけど、
a:(.) b:funcA c:(funcB (3 + 4)) だよ
そして a:funcB b: (3 + 4)
そして a:(+) b:3 c :4
演算順序を決める丸括弧は展開出来ないよ
compfunc = funcA 1 2 . funcB 4 5 . funcC 5 6 $ funcD 7 8
とあったとき、まず演算子を越えずに関数適用
compfunc = ((funcA 1) 2) . ((funcB 3) 4) . ((funcC 5 ) 6) $ ((funcD 7) 8)
このあとで演算子の優先順位で計算
>自分の理解では、a : funcA b:(.) c: funcB d:( 3+4)となるけど、
a:(.) b:funcA c:(funcB (3 + 4)) だよ
そして a:funcB b: (3 + 4)
そして a:(+) b:3 c :4
演算順序を決める丸括弧は展開出来ないよ
807デフォルトの名無しさん
2018/10/17(水) 03:18:56.29ID:QhFRNLWc 300行近くあるコードなんですが
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです
https://csacademy.com/code/4vUVk5c9/
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです
https://csacademy.com/code/4vUVk5c9/
808795
2018/10/17(水) 09:26:31.84ID:NmM3N1fc なんとなくわかったというか 暫定でわかった
要するに”関数適用の優先順位は高い”なんだろうね
関数の優先順位の記述が無いのは、そのようなルールが不要だと思えばいいわけで。
かっこ付けのやるべき順序として
1.関数適用 部分適用が出来るなら強欲に
2.演算子の優先順位と結合性でかっこ付け
これで、かっこ付けが終わったので、シグネチャとの整合性を取ってみる。
あっていなければ、コンパイラーエラー
ということで、コンパイラーも理解出来そうなルールになっていそうだし、
>>806とも整合性が取れそうかな
要するに”関数適用の優先順位は高い”なんだろうね
関数の優先順位の記述が無いのは、そのようなルールが不要だと思えばいいわけで。
かっこ付けのやるべき順序として
1.関数適用 部分適用が出来るなら強欲に
2.演算子の優先順位と結合性でかっこ付け
これで、かっこ付けが終わったので、シグネチャとの整合性を取ってみる。
あっていなければ、コンパイラーエラー
ということで、コンパイラーも理解出来そうなルールになっていそうだし、
>>806とも整合性が取れそうかな
809デフォルトの名無しさん
2018/10/17(水) 09:28:42.96ID:NmM3N1fc >>806さん いろいろThx
810デフォルトの名無しさん
2018/10/17(水) 11:49:29.63ID:RJ0latBv BNF見ればちゃんと分かる
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html
単純化するなら
exp = exp1 | exp1 op exp
exp1 = exp2 | exp1 exp2
exp2 = var | (exp)
二項演算子の優先順位を実現するには別の処理が必要だけど
少なくとも関数適用と二項演算子の計算が並ぶことはない
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html
単純化するなら
exp = exp1 | exp1 op exp
exp1 = exp2 | exp1 exp2
exp2 = var | (exp)
二項演算子の優先順位を実現するには別の処理が必要だけど
少なくとも関数適用と二項演算子の計算が並ぶことはない
811デフォルトの名無しさん
2018/10/17(水) 12:47:09.36ID:NmM3N1fc■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★4 [♪♪♪★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 日中関係悪化で「日本からもうすぐパンダがいなくなる」 中国SNSでトレンド1位に★2 [♪♪♪★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【旧統一教会】年度内に解散命令請求に結論 教団は最終主張書面を東京高裁に提出 [1ゲットロボ★]
- 【音楽】石川ひとみ「まちぶせ」はストーカーか 衆院委で質問 [膳摩漏★]
- 【実況】博衣こよりのえちえちホロ分かり手クイズ🧪🏴‍☠🌸
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」 [115996789]
- 【高市朗報】オスザルの一部は同性へのマウンティング時に「挿入&射精」していたと判明 [947959745]
- 【んな専🏡】華金もんなっしょいとはやれやれなのらね🍬(・o・🍬)🏰
- ひもじい ←なぜか変換できない
- 【悲報】高市さん「つい言い過ぎた」 [771977901]
