Advertisement
niktkolwiek

lista 10 zad 2

Dec 13th, 2011
2,591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Oz 1.38 KB | None | 0 0
  1. %Wrapper.oz
  2. functor
  3. export
  4.    wrap:Wrap
  5.    unwrap:Unwrap
  6. define
  7.    Key={NewName}
  8.    Wrap Unwrap
  9. in
  10.    fun {Wrap X} fun {$ K} if K==Key then X end end
  11.    end
  12.    fun {Unwrap W}
  13.       try {W Key} catch _ then raise error(unwrap(W)) end end
  14.    end
  15. end
  16.  
  17. %Queue.oz
  18. functor
  19. import
  20.    Wrapper
  21. export
  22.    tworz_pusta:Pusta
  23.    do_kolejki:DoKolejki
  24.    z_kolejki:ZKolejki
  25.    pierwszy_element:PElement
  26.    kolejka_pusta:CzyPusta
  27. define
  28.    fun {Pusta} {Wrapper.wrap kolejkaPusta} end
  29.    fun {DoKolejki E#Q}
  30.       {Wrapper.wrap skladowa(E {Wrapper.unwrap Q})}
  31.    end
  32.    fun {PElement Q}
  33.       local fun {Pom Q}
  34.            case Q
  35.            of kolejkaPusta then raise kolejkaPusta end
  36.            [] skladowa(E kolejkaPusta) then E
  37.            [] skladowa(E Qe) then {PElement Qe}
  38.            end
  39.         end
  40.       in {Pom {Wrapper.unwrap Q}}
  41.       end
  42.    end
  43.    fun {ZKolejki Q}
  44.       local fun {Pom Q}
  45.       case Q
  46.       of kolejkaPusta then raise kolejkaPusta end
  47.       [] skladowa(E kolejkaPusta) then kolejkaPusta
  48.       [] skladowa(E Qe) then skladowa(E {Pom Qe})
  49.       end
  50.       end in {Wrapper.wrap {Pom {Wrapper.unwrap Q}}}
  51.       end
  52.    end
  53.    fun {CzyPusta Q}
  54.       {Wrapper.unwrap Q}==kolejkaPusta
  55.    end
  56. end
  57.  
  58. %test.oz
  59. declare [Qu]={Module.link['Queue.ozf']}
  60. declare
  61. Q={Qu.do_kolejki 3 {Qu.do_kolejki 2 {Qu.do_kolejki 1 {Qu.tworz_pusta}}}}
  62. {Show{Qu.pierwszy_element {Qu.z_kolejki Q}}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement