Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %Wrapper.oz
- functor
- export
- wrap:Wrap
- unwrap:Unwrap
- define
- Key={NewName}
- Wrap Unwrap
- in
- fun {Wrap X} fun {$ K} if K==Key then X end end
- end
- fun {Unwrap W}
- try {W Key} catch _ then raise error(unwrap(W)) end end
- end
- end
- %Queue.oz
- functor
- import
- Wrapper
- export
- tworz_pusta:Pusta
- do_kolejki:DoKolejki
- z_kolejki:ZKolejki
- pierwszy_element:PElement
- kolejka_pusta:CzyPusta
- define
- fun {Pusta} {Wrapper.wrap kolejkaPusta} end
- fun {DoKolejki E#Q}
- {Wrapper.wrap skladowa(E {Wrapper.unwrap Q})}
- end
- fun {PElement Q}
- local fun {Pom Q}
- case Q
- of kolejkaPusta then raise kolejkaPusta end
- [] skladowa(E kolejkaPusta) then E
- [] skladowa(E Qe) then {PElement Qe}
- end
- end
- in {Pom {Wrapper.unwrap Q}}
- end
- end
- fun {ZKolejki Q}
- local fun {Pom Q}
- case Q
- of kolejkaPusta then raise kolejkaPusta end
- [] skladowa(E kolejkaPusta) then kolejkaPusta
- [] skladowa(E Qe) then skladowa(E {Pom Qe})
- end
- end in {Wrapper.wrap {Pom {Wrapper.unwrap Q}}}
- end
- end
- fun {CzyPusta Q}
- {Wrapper.unwrap Q}==kolejkaPusta
- end
- end
- %test.oz
- declare [Qu]={Module.link['Queue.ozf']}
- declare
- Q={Qu.do_kolejki 3 {Qu.do_kolejki 2 {Qu.do_kolejki 1 {Qu.tworz_pusta}}}}
- {Show{Qu.pierwszy_element {Qu.z_kolejki Q}}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement