関数型言語でフラグ管理をする方法
■ このスレッドは過去ログ倉庫に格納されています
選択肢が4つでてくる問題が10問でてきて 8問以上正解すればクリアとかどうやって実装するの? 関数型言語ってc言語とかクラスのない言語のことかと思ってたら すげーゴミ過ぎて一生関わりたくないと思った 3問まちがった時点でゲームオーバー わかった? アナルプラグのこと? 使ってみないとその良さはわからないよ? まあfoldlとかで折り畳みしてmaybeとかでドボンじゃないか? >>1 do使った関数の2重ループ(2重再帰)で行けるんじゃね? 10回ループは引数に10指定して1回毎にー1して0になったら抜けるループ(再帰)。 (その際に正解数8問以上ならクリアと表示。以下なら残念と表示とか) その中の回答ループで引数に正解数を指定する。正解なら+1してループ(再帰) 不正解ならそのままループ(再帰) あ、問題文字列の配列と正解の数字の配列zipしても行けそう。 >>5 答え合わせは10問終わってからなので無理です 問題文と対する選択文と答えを1セットにした配列等10問分を用意して、1セット毎にループで順番に入出力と正解数のカウント、最後に答えを集計して合否判定するとか? やはり低学歴知恵遅れしかいないわ やはりオレが正解書いてやるしかないのか https://ideone.com/bifXFo ANS_BIT(q,a) ← コレで設問の解答をつくる ANS_MASK(q,a) ← コレで回答する getbits() ← コレで正解の数を数える コレでこのスレはおわった 関数型言語ですら無い。。。 十分ヒント書いたろ。 全部書くと質問者の為にならん。 RWH読まないと入出力順で苦労するだろうけど。 関数型言語はこんな簡単な問題ですらパッと出来ないクソ言語です。 簡単な問題を解くのに誰も頼んでない余計な縛りを入れて難しくします。 わざわざ不必要にめんどくさくした問題を解いてマウントを取り、一方簡単な問題を簡単に解いた一般人に副作用ガー不変性ガーと難癖を付けて貶します。 なんだとこら ループを再帰で書いたり畳み込んだり分岐をパターンマッチで書いたりでカッケーだろうが >>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.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる