[過去ログ]
関数型プログラミング言語Haskell Part32 (1002レス)
関数型プログラミング言語Haskell Part32 http://mevius.5ch.net/test/read.cgi/tech/1548720347/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
175: デフォルトの名無しさん [sage] 2019/02/23(土) 00:41:48.52 ID:RiBir1w3 カリー化関数の意図がわからん sum_of :: (Integer -> Integer, Integer, Integer) -> Integer sum_of (f, n, m) | n > m = 0 | otherwise = f n + sum_of (f, n + 1, m) これはわかる sum_of' :: (Integer -> Integer) -> Integer -> Integer -> Integer sum_of' f n m | n > m = 0 | otherwise = f n + sum_of' f (n + 1) m どう見ても書き換えただけにしか見えないんだけどこれ意味あって書いてるのかな カリー化って引数可変で動作する関数を定義するためのものって理解したけど 後者にはそんな意図が含まれてるように見えない http://mevius.5ch.net/test/read.cgi/tech/1548720347/175
177: デフォルトの名無しさん [sage] 2019/02/23(土) 02:59:05.43 ID:RiBir1w3 >>176 (*2)の意味わからなくて前後調べたら演算子をカリー化できるとかあって やっと意味わかったありがとう しかも例題の先の先の方に有効な利用法書いてあったけど なんかどうもサイトの進め方と合わないなー・・変えるかー こんなこと書いてもなんか意味あんのだから何なんみたいな悶々パターンが多すぎる とても簡単ですとか書いてあったら相当難しいフラグ確定 考え方が違うんだろうな http://mevius.5ch.net/test/read.cgi/tech/1548720347/177
180: デフォルトの名無しさん [sage] 2019/02/23(土) 13:04:48.43 ID:RiBir1w3 しかしいいサイト全然ないなどうしたもんか お前らどうやって習得したのよこんな難解な言語 http://mevius.5ch.net/test/read.cgi/tech/1548720347/180
183: デフォルトの名無しさん [sage] 2019/02/23(土) 17:11:04.23 ID:RiBir1w3 Prelude> let foo n = ¥x -> x * n Prelude> :t foo foo :: Num a => a -> a -> a Prelude> let foo10 = foo 10 Prelude> :t foo10 foo10 :: Integer -> Integer Prelude> foo10 10 100 Prelude> foo10 20 200 Prelude> let foo100 = foo 100 Prelude> foo100 10 1000 Prelude> foo100 20 2000 Prelude> let foo5 = foo 5 Prelude> foo5 10 50 Prelude> foo5 20 100 Prelude> :t foo (1.234 :: Double) foo (1.234 :: Double) :: Double -> Double http://mevius.5ch.net/test/read.cgi/tech/1548720347/183
184: デフォルトの名無しさん [sage] 2019/02/23(土) 17:12:26.05 ID:RiBir1w3 >>183のクロージャの説明がさっぱりわからない 関数を生成する関数を簡単に作ることができるって言ってるんだけど やってることは定義を繰り返してるだけでちっとも生成してない どういう意味で関数を生成したって言ってるんだろ・・ Stringで関数生成してevalで評価しましただったらわかるんだけど、これ違うよね それともhaskellの場合は関数定義は関数生成としているのか・・わからん 一体これは何が言いたいのか・・ 実はどうでもいいことで気にしなくてもいいなら納得するんだけども http://mevius.5ch.net/test/read.cgi/tech/1548720347/184
187: デフォルトの名無しさん [sage] 2019/02/23(土) 17:46:51.51 ID:RiBir1w3 >>186 そうじゃなくてこれ関数定義だけで生成なんかしてないよね?って話 ぱっと見パスしてもいいようなどうでもいいことにも見える そうであれば次に行く どうもHaskellは納得いかないことがあまりにも多いんだ 文化の違いなのか考え方の違いなのかわからんけど CかObj-CかSmalltalk-80/VisualWorksで http://mevius.5ch.net/test/read.cgi/tech/1548720347/187
189: デフォルトの名無しさん [sage] 2019/02/23(土) 18:05:45.67 ID:RiBir1w3 >>188 foo10は結局のところ ¥x->x*n を呼び出してるだけじゃないの? ¥x->x*10って関数を生成してないよね? そういうことではない? http://mevius.5ch.net/test/read.cgi/tech/1548720347/189
191: デフォルトの名無しさん [sage] 2019/02/23(土) 18:12:36.80 ID:RiBir1w3 >>190 PythonならBlenderで頂点やマテリアル抽出するときに必須だったから使ったことあるけど インデント縛りで胃が溶けそうだった 正直もうやりたくない・・ http://mevius.5ch.net/test/read.cgi/tech/1548720347/191
193: デフォルトの名無しさん [sage] 2019/02/23(土) 18:28:43.67 ID:RiBir1w3 >>192 わかった! 無名関数で定義されてるからできるってことかー 納得できたありがとう 次行ってみる http://mevius.5ch.net/test/read.cgi/tech/1548720347/193
195: デフォルトの名無しさん [sage] 2019/02/23(土) 18:33:42.53 ID:RiBir1w3 >>194 C++は全く知らないのでそっちはなんとも http://mevius.5ch.net/test/read.cgi/tech/1548720347/195
196: デフォルトの名無しさん [sage] 2019/02/23(土) 18:51:02.51 ID:RiBir1w3 早速詰まった何を言ってるのかわからん 一般に、関数を呼び出す場合、関数を評価するための環境は空リストです。 最初に、引数がこの環境に追加されます。let で定義される局所変数もこの環境に追加されます。 もしも、環境に該当する変数が存在しない場合は大域変数を参照します。 たとえば、foo 5 と呼び出すと環境は次のようになります。 foo 5 ==> 環境 : [(n, 5)] ghciで実行 Prelude> let foo n = ¥x -> x * n Prelude> foo 5 <interactive>:2:1: error: • No instance for (Show (Integer -> Integer)) arising from a use of ‘print’ (maybe you haven't applied a function to enough arguments?) • In a stmt of an interactive GHCi command: print it Prelude> そりゃそうだよねぇ・・ なんなんだろう何が言いたいのかさっぱりわからない 本当にこんな説明でみんな理解してったの? http://mevius.5ch.net/test/read.cgi/tech/1548720347/196
198: デフォルトの名無しさん [sage] 2019/02/23(土) 19:34:16.40 ID:RiBir1w3 >>197 そっかわかったありがとう! 関数の合成もすぐわかったのでさらに次行ってみる http://mevius.5ch.net/test/read.cgi/tech/1548720347/198
199: デフォルトの名無しさん [sage] 2019/02/23(土) 20:14:35.45 ID:RiBir1w3 データ型の定義まで来た なんというかやっぱりこのサイトこれからhaskell入門の人にはどうでもいい余計なこと書きすぎなんじゃ・・ と思った http://mevius.5ch.net/test/read.cgi/tech/1548720347/199
200: デフォルトの名無しさん [sage] 2019/02/23(土) 21:08:00.52 ID:RiBir1w3 do構文がIO型だからこのように書ける・・というのがどうもしっくりこないけど 都合上こうするしかなかったってだけの話で特別な意味はないのかな calc :: IO () calc = do putStr "Input Integer1 > " x <- readLn :: IO Integer putStr "Input Integer2 > " y <- readLn :: IO Integer let a = x + y b = x - y c = x * y d = x `div` y n1 = show x n2 = show y putStrLn (n1 ++ "+" ++ n2 ++ "=" ++ show a) putStrLn (n1 ++ "-" ++ n2 ++ "=" ++ show b) putStrLn (n1 ++ "*" ++ n2 ++ "=" ++ show c) putStrLn (n1 ++ "/" ++ n2 ++ "=" ++ show d) http://mevius.5ch.net/test/read.cgi/tech/1548720347/200
202: デフォルトの名無しさん [sage] 2019/02/23(土) 21:25:53.99 ID:RiBir1w3 納得しないと進まないタイプなので http://mevius.5ch.net/test/read.cgi/tech/1548720347/202
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.053s