関数型言語でフラグ管理をする方法
■ このスレッドは過去ログ倉庫に格納されています
選択肢が4つでてくる問題が10問でてきて 8問以上正解すればクリアとかどうやって実装するの? なんだとこら ループを再帰で書いたり畳み込んだり分岐をパターンマッチで書いたりでカッケーだろうが >>23 別に関数型じゃなくても、それできると思う メリットが無いからやらないだけで 数式をそのままコードに落とせる時もあったが、そもそも組みたい機能がカッコよく数式に落とせるモノじゃなかった 関数型の特徴でもある末尾再帰 末尾再帰は速度を上げる機能ではなく 速度が遅くならないようにする機能 普通にループで書けば速いのに、それができないから再帰で書く そうすると遅くなる。それを回避する機能 普通にループで書くより速くなったりしない そう。わざわざなぜ末尾再帰にするかというと、そうすることでループへ変換してくれるから。 こういうのを本末転倒と言う。 じゃあ極力ループ使わなければいい 頭ワルイわ 低学歴知恵遅れにループ使わせると 一回ループするのにもの凄い時間かかるような処理を平気でいれるからな しかもそれが何重にもなってる int numofbits5(long bits) { bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555); bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333); bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f); bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff); return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff); } もしかして、ラジオボタンとかの想定で悩んでるのか? >>30 再帰。 doの再帰は末尾再帰でなくてもループになる。 じゃあ最初からループでよい。関数型バカの遊びに付き合ってやるほど暇ではない。 え、このスレの趣旨は? と言うかHaskellとジャンケンとかで検索したらほぼ手本になる様なの出るだろ。 何の関数型言語使ってるか知らないが、ヒントになりそうな物くらいはググれよ。 フラグ管理をする方法 とスレタイに書いてある マジでこの板は低学歴知恵遅れしかいない そしてオレはそのコタエは書いた もう終了してるハズ >>34 > doの再帰は末尾再帰でなくてもループになる。 話、理解してる? 「ループを再帰でかく⇒再帰をループに戻す」これが本末転倒だって話をしてる所に 「ループじゃなくて再帰を使え、doの再帰はループになる」と本末転倒の話そのものを 持ってきてどうする?話がループしてるwww >>38 うーむ。 説明が難しいな。 入出力のある関数を通常ん関数に使えないので、do付けて手続き型っぽい逐次実行するんだけど、その際のループも再帰で出来るよと。 まあ関数型言語が得意なのは関数みたいな入力ー>出力なのだから、アルゴリズムの勉強に留めて、実践は手続き型言語でやった方がいいと思うけどね。 数学にループという概念がないから苦労してるんだな ゼロを発見してない文化圏でゼロと同等の事を扱うみたいな馬鹿げた行為にしか見えない 慣れてないからそう思うだけで、慣れればどっちでも。 で、なれるのが大変だから、見ての通り >>1 の答えすらでないんやで ごらんください コレが見事に低学歴だけが集結した結果のスレ この板にいるようなヤツラはサル程度の知能しかないのがよおくわかるだろ この板にいるヤツラのオツム程度は3つの制御の使いかたぐらいしかしらない この程度での知能ですむ この程度でのことを延々と書き込んでるワケ まあサルでもできる程度のことしか、ひたすらずーっとやってないワケ わかる? 言語なんか方言だからな コレが日本で求められるPGの姿 低学歴知恵遅れ底辺のドカタでも余裕できる まさしくこのスレそのもの >>46 30年前にbasicでWindowシステム作ってたぞ >>42 ほらよ。 main = qa [] q >>= return.(zip a) >>= return.(map (\(x,y) -> check x y)) >>= return.(trueSum 0) >>= judgment qa ns [] = return ns qa ns (x:xs)= putStr x >> getChar >>= (\c -> print c >> qa (ns ++ [c]) xs) check a = (a==) judgment n |n >= 8 = putStrLn "You Win!!" judgment _ = putStrLn "You Lose..." trueSum n [] = n trueSum n (True:xs) = trueSum (n + 1) xs trueSum n (False:xs) = trueSum n xs q = ["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"] a = "1234123412" do形式にはそっちで勝手に直してね。(関数型っぽくなくて嫌いなんだ) 久々だったから関数脳が腐りかけてた。 Rubyならこんな感じ。 適当に関数型に変えてくれ。 def aaa(remain, target, ok) p tmp = rand > 0.5 ok += 1 if tmp return true if ok >= target if remain + ok < target return false else return aaa(remain - 1, target, ok) end end remain = 10 target = 8 ok = 0 p ['result =', aaa(remain, target, ok)] >>53 なんかキモい def aaa(remain, target, ok) return false if remain.zero? return true if ok >= target p ans = rand > 0.5 aaa(remain - 1, target, ok + (ans ? 1 : 0)) end remain = 10 target = 8 ok = 0 p ['result =', aaa(remain, target, ok)] return falseの条件を変えて途中で諦めたほうが良いか >>51 無駄なコード減らして、解答リストに1〜4以外の文字が入ってたら(あえて)実行時エラーで終了するようにしてみた。 main = elecheck a >> getcheck [] d >>= judgment.trueSum -- Input char and check anser. getcheck ns [] = return ns getcheck ns ((x,y):xs)= putStr x >> getChar >>= \c -> print c >> getcheck ((y == c):ns) xs judgment n |n >= 8 = putStrLn "You Win!!" judgment _ = putStrLn "You Lose..." trueSum = length.(filter (==True)) -- Check anser array in 1..4 number? elecheck [] = return () elecheck (e:es) |(('1' <= e) && ('4' >= e)) = elecheck es d = zip q a q = ["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"] a = "1234123412" そのdo記法バージョン。 main = do elecheck a bs <- getcheck [] d judgment $ trueSum bs getcheck ns [] = return ns getcheck ns ((x,y):xs)= do putStr x c <- getChar print c getcheck ((y == c):ns) xs judgment n |n >= 8 = putStrLn "You Win!!" judgment _ = putStrLn "You Lose..." trueSum = length.(filter (==True)) elecheck [] = return () elecheck (e:es) |(('1' <= e) && ('4' >= e)) = elecheck es d = zip q a q = ["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"] a = "1234123412" 途中で切れてたので再投稿。 main = do elecheck a bs <- getcheck [] d judgment $ trueSum bs getcheck ns [] = return ns getcheck ns ((x,y):xs)= do putStr x c <- getChar print c getcheck ((y == c):ns) xs judgment n |n >= 8 = putStrLn "You Win!!" judgment _ = putStrLn "You Lose..." trueSum = length.(filter (==True)) elecheck [] = return () elecheck (e:es) |(('1' <= e) && ('4' >= e)) = elecheck es d = zip q a q = ["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"] a = "1234123412" trueSum = length.(filter (==True)) elecheck [] = return () elecheck (e:es) |(('1' <= e) && ('4' >= e)) = elecheck es d = zip q a q = ["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"] a = "1234123412" >>58-59 はiPadのRaskellで動かしたんだけど、PCだと上手く動かない。 (OSのバッファ機能とHaskellの遅延評価の悪い相乗効果) ここでRWHの内容が活きてくるんだけど、答えは内緒。 一問ごとに正解なら1、不正解なら0を返す関数を書いて 10個足して8以上ならCドライブをフォーマット でいいんじゃないの? Excelのワークシート関数だけで作ってみると 関数型言語でどう組めばいいかわかるよ! わかるよ! お前らバカにするけどExcelってすげぇソフトだと思うよ俺は。 神エクセルが悪いだけ。 >>61 ヒントくらい書くか。 hFlushとhSetBuffering関数をHoogleで調べてね。 >>1 とかじゃんけんゲームみたいなのには必須だよ。 >>71 datterのx.jsonファイルを見させていただきました ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる