; ENROLLMENT CONTROL SYSTEM ; version 2 ; -------------------------------------------------------------------- ; SORTS ; -------------------------------------------------------------------- ( deftype DB FF CId Course ) ;--------------------- ( deftype Course FF SId Inf ) ;--------------------- ( deftype CId STR ) ;--------------------- ( deftype SId STR ) ;--------------------- ( deftype Inf ALT NIL Mark ) ;--------------------- ( deftype Mark INT ) ;--------------------- ( def _state ( quote C ) ) ;--------------------- ; -------------------------------------------------------------------- ; EVENTS ; -------------------------------------------------------------------- ( def _ops ( plus _ops ( makeff ( ( quote Init ) ( quote ( ( ) NIL ) ) ) ) ) ) ;--------------------- ( def Init lambda ( ) ( def C ( makeff ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote DefineCourse ) ( quote ( ( ( CId ) ) NIL ) ) ) ) ) ) ;--------------------- ( def DefineCourse lambda ( c ) ( if ( not ( member c ( dom C ) ) ) ( def C ( plus C ( makeff ( c ( makeff ) ) ) ) ) ( strcat "ERROR (precondition violated) in function " "DefineCourse" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote InsStu ) ( quote ( ( ( SId ) ( CId ) ) NIL ) ) ) ) ) ) ;--------------------- ( def InsStu lambda ( n c ) ( if ( and ( member c ( dom C ) ) ( not ( member n ( dom ( ap C c ) ) ) ) ) ( def C ( plus C ( makeff ( c ( plus ( ap C c ) ( makeff ( n nil ) ) ) ) ) ) ) ( strcat "ERROR (precondition violated) in function " "InsStu" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote InsMark ) ( quote ( ( ( SId ) ( CId ) ( Mark ) ) NIL ) ) ) ) ) ) ;--------------------- ( def InsMark lambda ( n c p ) ( if ( and ( member c ( dom C ) ) ( member n ( dom ( ap C c ) ) ) ) ( def C ( plus C ( makeff ( c ( plus ( ap C c ) ( makeff ( n p ) ) ) ) ) ) ) ( strcat "ERROR (precondition violated) in function " "InsMark" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote RemStu ) ( quote ( ( ( SId ) ( CId ) ) NIL ) ) ) ) ) ) ;--------------------- ( def RemStu lambda ( n c ) ( if ( and ( member c ( dom C ) ) ( member n ( dom ( ap C c ) ) ) ) ( def C ( plus C ( makeff ( c ( ds ( ap C c ) ( makeset n ) ) ) ) ) ) ( strcat "ERROR (precondition violated) in function " "RemStu" ) ) ) ;--------------------- ; -------------------------------------------------------------------- ; FUNCTIONS ; -------------------------------------------------------------------- ( def _ops ( plus _ops ( makeff ( ( quote Vacancies ) ( quote ( ( ( CId ) ) ( INT ) ) ) ) ) ) ) ;--------------------- ( def Vacancies lambda ( c ) ( if ( member c ( dom C ) ) ( sub 50 ( card ( dom ( ap C c ) ) ) ) ( strcat "ERROR (precondition violated) in function " "Vacancies" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote PosMark ) ( quote ( ( ( CId ) ) ( SET SId ) ) ) ) ) ) ) ;--------------------- ( def PosMark lambda ( c ) ( if ( and ( member c ( dom C ) ) ( ALL x ( dom ( ap C c ) ) ( is Mark ( ap ( ap C c ) x ) ) ) ) ( set x ( from x ( dom ( ap C c ) ) ( geq ( ap ( ap C c ) x ) 10 ) ) ) ( strcat "ERROR (precondition violated) in function " "PosMark" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote DidBetter ) ( quote ( ( ( Mark ) ( CId ) ) ( SET SId ) ) ) ) ) ) ) ;--------------------- ( def DidBetter lambda ( m c ) ( if ( and ( member c ( dom C ) ) ( ALL x ( dom ( ap C c ) ) ( is Mark ( ap ( ap C c ) x ) ) ) ) ( set x ( from x ( dom ( ap C c ) ) ( geq ( ap ( ap C c ) x ) m ) ) ) "Sorry: Marks not yet available" ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote MinMark ) ( quote ( ( ( CId ) ) ( SET SId ) ) ) ) ) ) ) ;--------------------- ( def MinMark lambda ( c ) ( if ( and ( member c ( dom C ) ) ( ALL x ( dom ( ap C c ) ) ( is Mark ( ap ( ap C c ) x ) ) ) ) ( let ( ( mc ( reduce 999 m ( ran ( ap C c ) ) ) ) ) ( set x ( from x ( dom ( ap C c ) ) ( equal ( ap ( ap C c ) x ) mc ) ) ) ) ( strcat "ERROR (precondition violated) in function " "MinMark" ) ) ) ;--------------------- ( def m lambda ( a b ) ( if ( lt a b ) a b ) ) ;--------------------- ; -------------------------------------------------------------------- ; TESTES ; -------------------------------------------------------------------- ( Init ) ;--------------------- ( DefineCourse "logic" ) ;--------------------- ( DefineCourse "specs" ) ;--------------------- ( InsStu "anne" "logic" ) ;--------------------- ( InsStu "mary" "specs" ) ;--------------------- ( InsStu "anne" "specs" ) ;--------------------- ( InsStu "peter" "specs" ) ;--------------------- ( InsStu "john" "logic" ) ;--------------------- ( InsStu "john" "specs" ) ;--------------------- ( InsStu "martha" "logic" ) ;--------------------- ( InsStu "paul" "logic" ) ;--------------------- ( InsMark "anne" "logic" 12 ) ;--------------------- ( InsMark "john" "logic" 7 ) ;--------------------- ( InsMark "martha" "logic" 10 ) ;--------------------- ( InsMark "paul" "logic" 17 ) ;---------------------