変数の初期値
Posted feedbacks - Haskell
お題は変数の「デフォルト値」をセットするコードなので、「デフォルト値」以外をセットできないHaskellでは普通にイニシャライズすればオッケイ?
それとは別に、スレッド間通信用のMVar型はnewEmptyMVarでもって、値のセットされていないインスタンスを手に入れられるので、MVarでやってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | module Main
where
import Control.Concurrent
import Control.Monad
uninitedMVar :: IO (MVar Int)
uninitedMVar = newEmptyMVar
initedMVar :: IO (MVar Int)
initedMVar = newMVar 4
setIfEmpty :: MVar Int -> Int -> IO ()
setIfEmpty em i = do
fEmpty <- isEmptyMVar em
if (fEmpty) then
tryPutMVar em i >> return ()
else
return ()
setAndPrint :: MVar Int -> IO()
setAndPrint em = do
setIfEmpty em 7
i <- takeMVar em
putStrLn $ show i
i = 4
main = do
print i
uninitedMVar >>= setAndPrint
initedMVar >>= setAndPrint
==>
4
7
4
|
if文きらいです...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | module Main
where
import Control.Concurrent
import Control.Monad
uninitedMVar :: IO (MVar Int)
uninitedMVar = newEmptyMVar
initedMVar :: IO (MVar Int)
initedMVar = newMVar 4
setIfEmpty :: MVar Int -> Int -> IO ()
setIfEmpty em i = isEmptyMVar em >>= \fEmpty -> when (fEmpty) $ putMVar em i
setAndPrint :: MVar Int -> IO()
setAndPrint em = do
setIfEmpty em 7
takeMVar em >>= putStrLn.show
i = 4 --immutable
main = do
print i
uninitedMVar >>= setAndPrint
initedMVar >>= setAndPrint
|



takuya_1st
#5927()
Rating-4/12=-0.33
[ reply ]