home *** CD-ROM | disk | FTP | other *** search
/ PSION CD 2 / PsionCDVol2.iso / Programs / 876 / hugs.sis / SampleVar.lhs < prev    next >
LaTeX Document  |  2000-09-21  |  2.1 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: LaTeX Document (document/latex).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert LaTeX Document (document/latex) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file LaTeX document text default
99% file LaTeX document, ASCII text default
100% checkBytes Printable ASCII default
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/281 LaTeX (Subdocument) default
100% detectItEasy Format: plain text[LF] default (weak)
100% xdgMime text/x-matlab default (weak)



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 25 0a 25 20 28 63 29 20 | 54 68 65 20 47 52 41 53 |%.% (c) |The GRAS|
|00000010| 50 2f 41 51 55 41 20 50 | 72 6f 6a 65 63 74 2c 20 |P/AQUA P|roject, |
|00000020| 47 6c 61 73 67 6f 77 20 | 55 6e 69 76 65 72 73 69 |Glasgow |Universi|
|00000030| 74 79 2c 20 31 39 39 35 | 0a 25 0a 5c 73 65 63 74 |ty, 1995|.%.\sect|
|00000040| 69 6f 6e 5b 53 61 6d 70 | 6c 65 56 61 72 5d 7b 53 |ion[Samp|leVar]{S|
|00000050| 61 6d 70 6c 65 20 76 61 | 72 69 61 62 6c 65 73 7d |ample va|riables}|
|00000060| 0a 0a 53 61 6d 70 6c 65 | 20 76 61 72 69 61 62 6c |..Sample| variabl|
|00000070| 65 73 20 61 72 65 20 73 | 6c 69 67 68 74 6c 79 20 |es are s|lightly |
|00000080| 64 69 66 66 65 72 65 6e | 74 20 66 72 6f 6d 20 61 |differen|t from a|
|00000090| 20 6e 6f 72 6d 61 6c 20 | 40 4d 56 61 72 40 3a 0a | normal |@MVar@:.|
|000000a0| 0a 5c 62 65 67 69 6e 7b | 69 74 65 6d 69 7a 65 7d |.\begin{|itemize}|
|000000b0| 0a 5c 69 74 65 6d 20 52 | 65 61 64 69 6e 67 20 61 |.\item R|eading a|
|000000c0| 6e 20 65 6d 70 74 79 20 | 40 53 61 6d 70 6c 65 56 |n empty |@SampleV|
|000000d0| 61 72 40 20 63 61 75 73 | 65 73 20 74 68 65 20 72 |ar@ caus|es the r|
|000000e0| 65 61 64 65 72 20 74 6f | 20 62 6c 6f 63 6b 2e 0a |eader to| block..|
|000000f0| 20 20 20 20 28 73 61 6d | 65 20 61 73 20 40 74 61 | (sam|e as @ta|
|00000100| 6b 65 4d 56 61 72 40 20 | 6f 6e 20 65 6d 70 74 79 |keMVar@ |on empty|
|00000110| 20 40 4d 56 61 72 40 29 | 0a 5c 69 74 65 6d 20 52 | @MVar@)|.\item R|
|00000120| 65 61 64 69 6e 67 20 61 | 20 66 69 6c 6c 65 64 20 |eading a| filled |
|00000130| 40 53 61 6d 70 6c 65 56 | 61 72 40 20 65 6d 70 74 |@SampleV|ar@ empt|
|00000140| 69 65 73 20 69 74 20 61 | 6e 64 20 72 65 74 75 72 |ies it a|nd retur|
|00000150| 6e 73 20 76 61 6c 75 65 | 2e 0a 20 20 20 20 28 73 |ns value|.. (s|
|00000160| 61 6d 65 20 61 73 20 40 | 74 61 6b 65 4d 56 61 72 |ame as @|takeMVar|
|00000170| 40 29 0a 5c 69 74 65 6d | 20 57 72 69 74 69 6e 67 |@).\item| Writing|
|00000180| 20 74 6f 20 61 6e 20 65 | 6d 70 74 79 20 40 53 61 | to an e|mpty @Sa|
|00000190| 6d 70 6c 65 56 61 72 40 | 20 66 69 6c 6c 73 20 69 |mpleVar@| fills i|
|000001a0| 74 20 77 69 74 68 20 61 | 20 76 61 6c 75 65 2c 20 |t with a| value, |
|000001b0| 61 6e 64 0a 70 6f 74 65 | 6e 74 69 61 6c 6c 79 2c |and.pote|ntially,|
|000001c0| 20 77 61 6b 65 73 20 75 | 70 20 61 20 62 6c 6f 63 | wakes u|p a bloc|
|000001d0| 6b 65 64 20 72 65 61 64 | 65 72 20 20 28 73 61 6d |ked read|er (sam|
|000001e0| 65 20 61 73 20 66 6f 72 | 20 40 70 75 74 4d 56 61 |e as for| @putMVa|
|000001f0| 72 40 20 6f 6e 20 65 6d | 70 74 79 20 40 4d 56 61 |r@ on em|pty @MVa|
|00000200| 72 40 29 2e 0a 5c 69 74 | 65 6d 20 57 72 69 74 69 |r@)..\it|em Writi|
|00000210| 6e 67 20 74 6f 20 61 20 | 66 69 6c 6c 65 64 20 40 |ng to a |filled @|
|00000220| 53 61 6d 70 6c 65 56 61 | 72 40 20 6f 76 65 72 77 |SampleVa|r@ overw|
|00000230| 72 69 74 65 73 20 74 68 | 65 20 63 75 72 72 65 6e |rites th|e curren|
|00000240| 74 20 76 61 6c 75 65 2e | 0a 20 28 64 69 66 66 65 |t value.|. (diffe|
|00000250| 72 65 6e 74 20 66 72 6f | 6d 20 40 70 75 74 4d 56 |rent fro|m @putMV|
|00000260| 61 72 40 20 6f 6e 20 66 | 75 6c 6c 20 40 4d 56 61 |ar@ on f|ull @MVa|
|00000270| 72 40 2e 29 0a 5c 65 6e | 64 7b 69 74 65 6d 69 7a |r@.).\en|d{itemiz|
|00000280| 65 7d 0a 0a 5c 62 65 67 | 69 6e 7b 63 6f 64 65 7d |e}..\beg|in{code}|
|00000290| 0a 6d 6f 64 75 6c 65 20 | 53 61 6d 70 6c 65 56 61 |.module |SampleVa|
|000002a0| 72 0a 20 20 20 20 20 20 | 20 28 0a 20 20 20 20 20 |r. | (. |
|000002b0| 20 20 20 20 53 61 6d 70 | 6c 65 56 61 72 2c 20 20 | Samp|leVar, |
|000002c0| 20 20 20 20 20 20 2d 2d | 3a 3a 20 74 79 70 65 20 | --|:: type |
|000002d0| 5f 20 3d 0a 20 0a 20 20 | 20 20 20 20 20 20 20 6e |_ =. . | n|
|000002e0| 65 77 53 61 6d 70 6c 65 | 56 61 72 2c 20 20 20 20 |ewSample|Var, |
|000002f0| 20 2d 2d 3a 3a 20 49 4f | 20 28 53 61 6d 70 6c 65 | --:: IO| (Sample|
|00000300| 56 61 72 20 61 29 0a 09 | 20 65 6d 70 74 79 53 61 |Var a)..| emptySa|
|00000310| 6d 70 6c 65 56 61 72 2c | 20 20 20 2d 2d 3a 3a 20 |mpleVar,| --:: |
|00000320| 53 61 6d 70 6c 65 56 61 | 72 20 61 20 2d 3e 20 49 |SampleVa|r a -> I|
|00000330| 4f 20 28 29 0a 09 20 72 | 65 61 64 53 61 6d 70 6c |O ().. r|eadSampl|
|00000340| 65 56 61 72 2c 09 20 20 | 20 2d 2d 3a 3a 20 53 61 |eVar,. | --:: Sa|
|00000350| 6d 70 6c 65 56 61 72 20 | 61 20 2d 3e 20 49 4f 20 |mpleVar |a -> IO |
|00000360| 61 0a 09 20 77 72 69 74 | 65 53 61 6d 70 6c 65 56 |a.. writ|eSampleV|
|00000370| 61 72 09 20 20 20 2d 2d | 3a 3a 20 53 61 6d 70 6c |ar. --|:: Sampl|
|00000380| 65 56 61 72 20 61 20 2d | 3e 20 61 20 2d 3e 20 49 |eVar a -|> a -> I|
|00000390| 4f 20 28 29 0a 0a 20 20 | 20 20 20 20 20 29 20 77 |O ().. | ) w|
|000003a0| 68 65 72 65 0a 0a 69 6d | 70 6f 72 74 20 43 6f 6e |here..im|port Con|
|000003b0| 63 42 61 73 65 0a 0a 0a | 74 79 70 65 20 53 61 6d |cBase...|type Sam|
|000003c0| 70 6c 65 56 61 72 20 61 | 0a 20 3d 20 4d 56 61 72 |pleVar a|. = MVar|
|000003d0| 20 28 49 6e 74 2c 09 09 | 2d 2d 20 31 20 20 3d 3d | (Int,..|-- 1 ==|
|000003e0| 20 66 75 6c 6c 0a 09 09 | 09 2d 2d 20 30 20 20 3d | full...|.-- 0 =|
|000003f0| 3d 20 65 6d 70 74 79 0a | 09 09 09 2d 2d 20 3c 30 |= empty.|...-- <0|
|00000400| 20 6e 6f 20 6f 66 20 72 | 65 61 64 65 72 73 20 62 | no of r|eaders b|
|00000410| 6c 6f 63 6b 65 64 0a 20 | 20 20 20 20 20 20 20 20 |locked. | |
|00000420| 20 4d 56 61 72 20 61 29 | 0a 0a 2d 2d 20 49 6e 69 | MVar a)|..-- Ini|
|00000430| 74 61 6c 6c 79 2c 20 61 | 20 40 53 61 6d 70 6c 65 |tally, a| @Sample|
|00000440| 56 61 72 40 20 69 73 20 | 65 6d 70 74 79 2f 75 6e |Var@ is |empty/un|
|00000450| 66 69 6c 6c 65 64 2e 0a | 0a 6e 65 77 45 6d 70 74 |filled..|.newEmpt|
|00000460| 79 53 61 6d 70 6c 65 56 | 61 72 20 3a 3a 20 49 4f |ySampleV|ar :: IO|
|00000470| 20 28 53 61 6d 70 6c 65 | 56 61 72 20 61 29 0a 6e | (Sample|Var a).n|
|00000480| 65 77 45 6d 70 74 79 53 | 61 6d 70 6c 65 56 61 72 |ewEmptyS|ampleVar|
|00000490| 0a 20 3d 20 6e 65 77 45 | 6d 70 74 79 4d 56 61 72 |. = newE|mptyMVar|
|000004a0| 20 20 20 20 20 20 20 20 | 20 20 3e 3e 3d 20 5c 20 | | >>= \ |
|000004b0| 76 61 6c 20 2d 3e 0a 20 | 20 20 6e 65 77 4d 56 61 |val ->. | newMVa|
|000004c0| 72 20 28 30 2c 76 61 6c | 29 0a 0a 6e 65 77 53 61 |r (0,val|)..newSa|
|000004d0| 6d 70 6c 65 56 61 72 20 | 3a 3a 20 61 20 2d 3e 20 |mpleVar |:: a -> |
|000004e0| 49 4f 20 28 53 61 6d 70 | 6c 65 56 61 72 20 61 29 |IO (Samp|leVar a)|
|000004f0| 0a 6e 65 77 53 61 6d 70 | 6c 65 56 61 72 20 61 20 |.newSamp|leVar a |
|00000500| 3d 20 64 6f 0a 20 20 20 | 76 20 3c 2d 20 6e 65 77 |= do. |v <- new|
|00000510| 45 6d 70 74 79 53 61 6d | 70 6c 65 56 61 72 0a 20 |EmptySam|pleVar. |
|00000520| 20 20 77 72 69 74 65 53 | 61 6d 70 6c 65 56 61 72 | writeS|ampleVar|
|00000530| 20 76 20 61 0a 20 20 20 | 72 65 74 75 72 6e 20 76 | v a. |return v|
|00000540| 0a 0a 65 6d 70 74 79 53 | 61 6d 70 6c 65 56 61 72 |..emptyS|ampleVar|
|00000550| 20 3a 3a 20 53 61 6d 70 | 6c 65 56 61 72 20 61 20 | :: Samp|leVar a |
|00000560| 2d 3e 20 49 4f 20 28 29 | 0a 65 6d 70 74 79 53 61 |-> IO ()|.emptySa|
|00000570| 6d 70 6c 65 56 61 72 20 | 76 0a 20 3d 20 74 61 6b |mpleVar |v. = tak|
|00000580| 65 4d 56 61 72 20 76 20 | 20 20 20 20 20 20 20 20 |eMVar v | |
|00000590| 3e 3e 3d 20 5c 20 28 72 | 65 61 64 65 72 73 2c 76 |>>= \ (r|eaders,v|
|000005a0| 61 72 29 20 2d 3e 0a 20 | 20 20 69 66 20 72 65 61 |ar) ->. | if rea|
|000005b0| 64 65 72 73 20 3e 3d 20 | 30 20 74 68 65 6e 0a 20 |ders >= |0 then. |
|000005c0| 20 20 20 20 70 75 74 4d | 56 61 72 20 76 20 28 30 | putM|Var v (0|
|000005d0| 2c 76 61 72 29 0a 20 20 | 20 65 6c 73 65 0a 20 20 |,var). | else. |
|000005e0| 20 20 20 70 75 74 4d 56 | 61 72 20 76 20 28 72 65 | putMV|ar v (re|
|000005f0| 61 64 65 72 73 2c 76 61 | 72 29 0a 0a 2d 2d 0a 2d |aders,va|r)..--.-|
|00000600| 2d 20 66 69 6c 6c 65 64 | 20 3d 3e 20 6d 61 6b 65 |- filled| => make|
|00000610| 20 65 6d 70 74 79 20 61 | 6e 64 20 67 72 61 62 20 | empty a|nd grab |
|00000620| 73 61 6d 70 6c 65 0a 2d | 2d 20 6e 6f 74 20 66 69 |sample.-|- not fi|
|00000630| 6c 6c 65 64 20 3d 3e 20 | 74 72 79 20 74 6f 20 67 |lled => |try to g|
|00000640| 72 61 62 20 76 61 6c 75 | 65 2c 20 65 6d 70 74 79 |rab valu|e, empty|
|00000650| 20 77 68 65 6e 20 72 65 | 61 64 20 76 61 6c 2e 0a | when re|ad val..|
|00000660| 2d 2d 0a 72 65 61 64 53 | 61 6d 70 6c 65 56 61 72 |--.readS|ampleVar|
|00000670| 20 3a 3a 20 53 61 6d 70 | 6c 65 56 61 72 20 61 20 | :: Samp|leVar a |
|00000680| 2d 3e 20 49 4f 20 61 0a | 72 65 61 64 53 61 6d 70 |-> IO a.|readSamp|
|00000690| 6c 65 56 61 72 20 73 76 | 61 72 0a 20 3d 20 74 61 |leVar sv|ar. = ta|
|000006a0| 6b 65 4d 56 61 72 20 73 | 76 61 72 20 20 20 20 20 |keMVar s|var |
|000006b0| 20 20 20 20 20 20 20 20 | 20 20 20 3e 3e 3d 20 5c | | >>= \|
|000006c0| 20 28 72 65 61 64 65 72 | 73 2c 76 61 6c 29 20 2d | (reader|s,val) -|
|000006d0| 3e 0a 20 20 20 70 75 74 | 4d 56 61 72 20 73 76 61 |>. put|MVar sva|
|000006e0| 72 20 28 72 65 61 64 65 | 72 73 2d 31 2c 76 61 6c |r (reade|rs-1,val|
|000006f0| 29 20 3e 3e 0a 20 20 20 | 74 61 6b 65 4d 56 61 72 |) >>. |takeMVar|
|00000700| 20 76 61 6c 0a 0a 2d 2d | 0a 2d 2d 20 66 69 6c 6c | val..--|.-- fill|
|00000710| 65 64 20 3d 3e 20 6f 76 | 65 72 77 72 69 74 65 0a |ed => ov|erwrite.|
|00000720| 2d 2d 20 6e 6f 74 20 66 | 69 6c 6c 65 64 20 3d 3e |-- not f|illed =>|
|00000730| 20 66 69 6c 6c 2c 20 77 | 72 69 74 65 20 76 61 6c | fill, w|rite val|
|00000740| 0a 2d 2d 0a 77 72 69 74 | 65 53 61 6d 70 6c 65 56 |.--.writ|eSampleV|
|00000750| 61 72 20 3a 3a 20 53 61 | 6d 70 6c 65 56 61 72 20 |ar :: Sa|mpleVar |
|00000760| 61 20 2d 3e 20 61 20 2d | 3e 20 49 4f 20 28 29 0a |a -> a -|> IO ().|
|00000770| 77 72 69 74 65 53 61 6d | 70 6c 65 56 61 72 20 73 |writeSam|pleVar s|
|00000780| 76 61 72 20 76 0a 20 3d | 20 74 61 6b 65 4d 56 61 |var v. =| takeMVa|
|00000790| 72 20 73 76 61 72 20 20 | 3e 3e 3d 20 5c 20 28 72 |r svar |>>= \ (r|
|000007a0| 65 61 64 65 72 73 2c 20 | 76 61 6c 29 20 2d 3e 0a |eaders, |val) ->.|
|000007b0| 20 20 20 63 61 73 65 20 | 72 65 61 64 65 72 73 20 | case |readers |
|000007c0| 6f 66 0a 20 20 20 20 20 | 31 20 2d 3e 20 0a 20 20 |of. |1 -> . |
|000007d0| 20 20 20 20 20 73 77 61 | 70 4d 56 61 72 20 76 61 | swa|pMVar va|
|000007e0| 6c 20 76 20 09 20 20 20 | 20 3e 3e 20 0a 20 20 20 |l v . | >> . |
|000007f0| 20 20 20 20 70 75 74 4d | 56 61 72 20 73 76 61 72 | putM|Var svar|
|00000800| 20 28 31 2c 76 61 6c 29 | 0a 20 20 20 20 20 5f 20 | (1,val)|. _ |
|00000810| 2d 3e 20 0a 20 20 20 20 | 20 20 20 70 75 74 4d 56 |-> . | putMV|
|00000820| 61 72 20 76 61 6c 20 76 | 20 3e 3e 20 0a 20 20 20 |ar val v| >> . |
|00000830| 20 20 20 20 70 75 74 4d | 56 61 72 20 73 76 61 72 | putM|Var svar|
|00000840| 20 28 6d 69 6e 20 31 20 | 28 72 65 61 64 65 72 73 | (min 1 |(readers|
|00000850| 2b 31 29 2c 20 76 61 6c | 29 0a 5c 65 6e 64 7b 63 |+1), val|).\end{c|
|00000860| 6f 64 65 7d 0a | |ode}. | |
+--------+-------------------------+-------------------------+--------+--------+