関数型言語でフラグ管理をする方法

■ このスレッドは過去ログ倉庫に格納されています
2018/10/30(火) 21:17:26.98ID:ZgZ/9CmG
選択肢が4つでてくる問題が10問でてきて
8問以上正解すればクリアとかどうやって実装するの?
2018/10/30(火) 21:34:37.03ID:OyNBi9EH
10回入力受け取って出力するだけでは
2018/10/30(火) 22:40:06.90ID:l4I6MHnL
Haskellで実装してみせればいいんじゃね?
2018/10/30(火) 23:23:23.32ID:sh92d/1G
関数型言語ってc言語とかクラスのない言語のことかと思ってたら
すげーゴミ過ぎて一生関わりたくないと思った
5デフォルトの名無しさん
垢版 |
2018/10/30(火) 23:37:25.85ID:H/liFP07
3問まちがった時点でゲームオーバー

わかった?
2018/10/31(水) 00:29:16.88ID:bv97uCMI
アナルプラグのこと?
使ってみないとその良さはわからないよ?
2018/10/31(水) 01:17:11.99ID:+I7YAfIe
まあfoldlとかで折り畳みしてmaybeとかでドボンじゃないか?
8デフォルトの名無しさん
垢版 |
2018/10/31(水) 02:17:22.18ID:gqtAU0ur
>>1
do使った関数の2重ループ(2重再帰)で行けるんじゃね?
10回ループは引数に10指定して1回毎にー1して0になったら抜けるループ(再帰)。
(その際に正解数8問以上ならクリアと表示。以下なら残念と表示とか)

その中の回答ループで引数に正解数を指定する。正解なら+1してループ(再帰)
不正解ならそのままループ(再帰)
9デフォルトの名無しさん
垢版 |
2018/10/31(水) 02:21:07.10ID:gqtAU0ur
あ、問題文字列の配列と正解の数字の配列zipしても行けそう。
2018/10/31(水) 04:35:14.99ID:o0DzM9PU
>>5
答え合わせは10問終わってからなので無理です
2018/10/31(水) 08:26:17.22ID:D1gUhDI7
こんな簡単なものもさっと出てこないのね
2018/10/31(水) 09:43:23.59ID:f5H4sbPi
問題文と対する選択文と答えを1セットにした配列等10問分を用意して、1セット毎にループで順番に入出力と正解数のカウント、最後に答えを集計して合否判定するとか?
2018/10/31(水) 22:26:52.18ID:wG8+54SG
そんなにお前らは破壊的更新が嫌なのか
2018/10/31(水) 23:16:16.27ID:D1gUhDI7
手続き脳老害が作るとこうなる
https://ideone.com/9rfXYS
2018/10/31(水) 23:20:19.59ID:o0DzM9PU
どうせゴミだろいらん
2018/10/31(水) 23:51:32.08ID:D1gUhDI7
うるせーお手本教えろや
17デフォルトの名無しさん
垢版 |
2018/11/01(木) 00:40:13.39ID:BwvtJmQs
やはり低学歴知恵遅れしかいないわ
やはりオレが正解書いてやるしかないのか

https://ideone.com/bifXFo

ANS_BIT(q,a) ← コレで設問の解答をつくる
ANS_MASK(q,a) ← コレで回答する
getbits() ← コレで正解の数を数える

コレでこのスレはおわった
2018/11/01(木) 01:02:10.75ID:v7JyYl4p
ビット演算はどうでもいいの
19デフォルトの名無しさん
垢版 |
2018/11/01(木) 04:19:58.62ID:wLGKIsYs
関数型言語ですら無い。。。

十分ヒント書いたろ。
全部書くと質問者の為にならん。
RWH読まないと入出力順で苦労するだろうけど。
2018/11/01(木) 11:27:29.30ID:BuoKXFI6
ビットを数える・探すアルゴリズムでぐぐれ
21デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:47:16.89ID:+p1vRE32
関数型言語はこんな簡単な問題ですらパッと出来ないクソ言語です。
簡単な問題を解くのに誰も頼んでない余計な縛りを入れて難しくします。
わざわざ不必要にめんどくさくした問題を解いてマウントを取り、一方簡単な問題を簡単に解いた一般人に副作用ガー不変性ガーと難癖を付けて貶します。
2018/11/01(木) 20:57:33.37ID:v7JyYl4p
それな
2018/11/01(木) 22:26:38.21ID:mvxPccjt
なんだとこら
ループを再帰で書いたり畳み込んだり分岐をパターンマッチで書いたりでカッケーだろうが
2018/11/02(金) 00:15:52.93ID:bE/8yEKV
>>23
別に関数型じゃなくても、それできると思う
メリットが無いからやらないだけで
2018/11/02(金) 21:50:50.01ID:Hx89MQzb
ここまでゴミ
2018/11/02(金) 22:34:02.29ID:Jnk4S5ca
数式をそのままコードに落とせる時もあったが、そもそも組みたい機能がカッコよく数式に落とせるモノじゃなかった
2018/11/02(金) 22:55:23.66ID:bE/8yEKV
関数型の特徴でもある末尾再帰

末尾再帰は速度を上げる機能ではなく
速度が遅くならないようにする機能

普通にループで書けば速いのに、それができないから再帰で書く
そうすると遅くなる。それを回避する機能
普通にループで書くより速くなったりしない
28デフォルトの名無しさん
垢版 |
2018/11/03(土) 00:09:24.27ID:3NGq3yLp
そう。わざわざなぜ末尾再帰にするかというと、そうすることでループへ変換してくれるから。
こういうのを本末転倒と言う。
29デフォルトの名無しさん
垢版 |
2018/11/03(土) 08:07:41.03ID:rSl2Ac3O
じゃあ極力ループ使わなければいい
頭ワルイわ

低学歴知恵遅れにループ使わせると
一回ループするのにもの凄い時間かかるような処理を平気でいれるからな

しかもそれが何重にもなってる
2018/11/03(土) 08:15:12.69ID:dQj0A1Se
ループを使わないでどうやって作るの?
2018/11/03(土) 08:34:36.98ID:BD8z/Z4W
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);
}
2018/11/03(土) 11:42:08.44ID:ugiNdMW1
ビット演算どうでもいいので
2018/11/03(土) 11:55:35.67ID:BD8z/Z4W
もしかして、ラジオボタンとかの想定で悩んでるのか?
34デフォルトの名無しさん
垢版 |
2018/11/03(土) 15:48:10.80ID:AAuGyX2A
>>30
再帰。
doの再帰は末尾再帰でなくてもループになる。
35デフォルトの名無しさん
垢版 |
2018/11/03(土) 16:08:14.93ID:3NGq3yLp
じゃあ最初からループでよい。関数型バカの遊びに付き合ってやるほど暇ではない。
36デフォルトの名無しさん
垢版 |
2018/11/03(土) 16:22:09.54ID:AAuGyX2A
え、このスレの趣旨は?
と言うかHaskellとジャンケンとかで検索したらほぼ手本になる様なの出るだろ。

何の関数型言語使ってるか知らないが、ヒントになりそうな物くらいはググれよ。
37デフォルトの名無しさん
垢版 |
2018/11/03(土) 16:28:33.22ID:rSl2Ac3O
 フラグ管理をする方法

とスレタイに書いてある
マジでこの板は低学歴知恵遅れしかいない

そしてオレはそのコタエは書いた
もう終了してるハズ
2018/11/03(土) 16:55:00.26ID:dQj0A1Se
>>34
> doの再帰は末尾再帰でなくてもループになる。
話、理解してる?

「ループを再帰でかく⇒再帰をループに戻す」これが本末転倒だって話をしてる所に
「ループじゃなくて再帰を使え、doの再帰はループになる」と本末転倒の話そのものを
持ってきてどうする?話がループしてるwww
39デフォルトの名無しさん
垢版 |
2018/11/03(土) 17:06:25.69ID:AAuGyX2A
>>38
うーむ。
説明が難しいな。
入出力のある関数を通常ん関数に使えないので、do付けて手続き型っぽい逐次実行するんだけど、その際のループも再帰で出来るよと。

まあ関数型言語が得意なのは関数みたいな入力ー>出力なのだから、アルゴリズムの勉強に留めて、実践は手続き型言語でやった方がいいと思うけどね。
2018/11/03(土) 17:15:10.17ID:DqN0hP1O
数学にループという概念がないから苦労してるんだな
ゼロを発見してない文化圏でゼロと同等の事を扱うみたいな馬鹿げた行為にしか見えない
41デフォルトの名無しさん
垢版 |
2018/11/03(土) 17:23:46.33ID:AAuGyX2A
慣れてないからそう思うだけで、慣れればどっちでも。
2018/11/03(土) 17:33:53.43ID:dQj0A1Se
で、なれるのが大変だから、見ての通り
>>1の答えすらでないんやで
2018/11/03(土) 17:43:27.37ID:ZYzZrFY6
えっ
2018/11/03(土) 17:43:47.23ID:ZYzZrFY6
Σはループじやね
45デフォルトの名無しさん
垢版 |
2018/11/03(土) 18:29:24.38ID:rSl2Ac3O
ごらんください
コレが見事に低学歴だけが集結した結果のスレ
46デフォルトの名無しさん
垢版 |
2018/11/03(土) 18:39:57.21ID:rSl2Ac3O
この板にいるようなヤツラはサル程度の知能しかないのがよおくわかるだろ
この板にいるヤツラのオツム程度は3つの制御の使いかたぐらいしかしらない
この程度での知能ですむ
この程度でのことを延々と書き込んでるワケ

まあサルでもできる程度のことしか、ひたすらずーっとやってないワケ
わかる? 言語なんか方言だからな
コレが日本で求められるPGの姿

低学歴知恵遅れ底辺のドカタでも余裕できる
まさしくこのスレそのもの
2018/11/03(土) 18:42:16.18ID:mzN5JvuB
最近Haskell書いてないから練習問題にするか
48デフォルトの名無しさん
垢版 |
2018/11/03(土) 18:49:17.75ID:rSl2Ac3O
それでいて低学歴知恵遅れの自覚がないからな
2018/11/03(土) 19:42:43.36ID:UfWv76uW
>>31
普通xorつかうだろ
2018/11/03(土) 19:44:09.65ID:UfWv76uW
>>46
30年前にbasicでWindowシステム作ってたぞ
51デフォルトの名無しさん
垢版 |
2018/11/03(土) 20:04:46.88ID:AAuGyX2A
>>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形式にはそっちで勝手に直してね。(関数型っぽくなくて嫌いなんだ)
久々だったから関数脳が腐りかけてた。
2018/11/03(土) 21:21:05.68ID:ugiNdMW1
>>37
>>51みたいに関数型で書けよ
53デフォルトの名無しさん
垢版 |
2018/11/04(日) 10:24:11.76ID:gXTKjRIr
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)]
2018/11/04(日) 11:07:00.38ID:Nn4ZdlZB
>>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)]
2018/11/04(日) 11:09:26.81ID:Nn4ZdlZB
return falseの条件を変えて途中で諦めたほうが良いか
56デフォルトの名無しさん
垢版 |
2018/11/04(日) 11:25:03.38ID:pidkuN2F
>>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"
57デフォルトの名無しさん
垢版 |
2018/11/04(日) 11:25:48.26ID:pidkuN2F
その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"
58デフォルトの名無しさん
垢版 |
2018/11/04(日) 11:27:53.10ID:pidkuN2F
途中で切れてたので再投稿。

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"
59デフォルトの名無しさん
垢版 |
2018/11/04(日) 11:28:20.18ID:pidkuN2F
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"
60デフォルトの名無しさん
垢版 |
2018/11/04(日) 15:31:56.65ID:95qKkVOL
>>53
これは酷い。関数型でもなんでもない。
61デフォルトの名無しさん
垢版 |
2018/11/04(日) 18:52:23.37ID:pidkuN2F
>>58-59 はiPadのRaskellで動かしたんだけど、PCだと上手く動かない。
(OSのバッファ機能とHaskellの遅延評価の悪い相乗効果)
ここでRWHの内容が活きてくるんだけど、答えは内緒。
2018/11/06(火) 23:35:47.99ID:ceG2/QGJ
一問ごとに正解なら1、不正解なら0を返す関数を書いて
10個足して8以上ならCドライブをフォーマット
でいいんじゃないの?
2018/11/07(水) 15:22:06.59ID:CUx7JRn8
全部不正解でいいんじゃね
2018/11/07(水) 15:42:00.65ID:GvDQxrPA
Excelのワークシート関数だけで作ってみると
関数型言語でどう組めばいいかわかるよ!
わかるよ!
2018/11/07(水) 16:07:13.80ID:nS0pqjfr
ていうかそんならExcelでいいじゃねーかw
2018/11/07(水) 16:26:15.62ID:oTVd6hn3
お前らバカにするけどExcelってすげぇソフトだと思うよ俺は。
神エクセルが悪いだけ。
67デフォルトの名無しさん
垢版 |
2018/11/07(水) 16:31:43.44ID:h4FWJh3K
>>61
ヒントくらい書くか。
hFlushとhSetBuffering関数をHoogleで調べてね。
>>1 とかじゃんけんゲームみたいなのには必須だよ。
68デフォルトの名無しさん
垢版 |
2018/11/11(日) 12:43:24.63ID:vUUak6BF
http://r2.upup.be/wV2qsULdHm
2018/11/11(日) 12:47:18.53ID:SClia95W
>>68
ブラクラ
2018/11/14(水) 01:25:26.63ID:nGPvCKDp
死亡フラグが立ってます
71デフォルトの名無しさん
垢版 |
2019/02/04(月) 22:16:29.13ID:fVmYxPyX
一応投げとくか

https://ideone.com/8v0bEW
https://gist.github.com/WhiteCat6142/8ad00596e6a5fb0620f4f9921f3b16e9
2019/03/11(月) 15:26:25.67ID:DVt5Y0At
hoogle...英語しか出てこないや
73デフォルトの名無しさん
垢版 |
2019/04/13(土) 00:45:40.57ID:WaVEKotj
>>71
datterのx.jsonファイルを見させていただきました
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況