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

■ このスレッドは過去ログ倉庫に格納されています
2018/10/30(火) 21:17:26.98ID:ZgZ/9CmG
選択肢が4つでてくる問題が10問でてきて
8問以上正解すればクリアとかどうやって実装するの?
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ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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