ohmega bidirectional /bin/umodem raytrace.2d STOP ,..................., ,..................., ,...................., ,...................., :t *===============*: :f *===============*: :ni *===============*: :no *===============*: -->!send[(Inl(),E)]!- -->!send[(Inr(),E)]!- : !send[(Inr(),E)]!- : !send[(Inl(),E)]!- : *===============*: : *===============*: : *===============*: : *===============*: ,..................., ,..................., ,...................., ,...................., ,....|.........................,,.............,,..|.................., ,..|..............., :and | *=============* *=====*::e *======* ::c v : :p v : : +>!case W of S,E!->!use f!-: !use ni!-+ :: *==================*: : *===============*: : *=============* *=====*:: *======* v :->!send[(Inl(W,N),E)]!- ->!send[((W,N),E)]!- : | :: *=====*:: *==================*: : *===============*: : v :------>!use c!-,....................., ,.................., : *=============* *=====*:: *=====*:,.....|.............................., ------>!case W of S,E!->!use f!-,.............,:main | *========* *=====* *======*: : *=============* *=====*: : +>!use init!->!use l!->!use it!- : | *=====*: : *========* *=====* *======*: : +-->!use t!- ,...................................., : *=====*: ,.............................., ,....|.................................,,...|............................................., :add | *=================* ::eq | *=================* : -----#>!send[(W,S),(W,E)]!-+ :----#->!send[(W,S),(W,E)]!----+ : : v *=================* | :: v *=================* v : :*=================* | | ::*=============* | *=============* *=====*: :!send[(N,S),(N,E)]!-#-----#---------+ ::!case N of E,S!--------#>!case N of E,S!->!use t!- :*=================* | v | ::*=============* | *=============* *=====*: : | *=============* | *===========* | :: | *=================* | | *=====*: : +>!case W of E,S!--#>!send[(N,E)]!-#--: +>!send[(W,S),(W,E)]!-#--+ +----->!use f!- : *=============* v *===========* v :: *=================* v | *=====*: : | *=============* *===========*:: | *=============* | *=====* : : +>!case N of E,S!-->!send[(N,E)]!-: +---->!case N of E,S!-#->!use f!-------------- : *=============* *===========*:: *=============* v *=====* : : | *=======================* :: | *======* : : +>!send[(Inr Inr Inl(),E)]!----: +---->!use eq!---------------------- : *=======================* :: *======* : ,......................................,,................................................., ,...|........................................,,....|.........................................., :ia | *=================* ::mul | : ----#>!send[(W,S),(W,E)]!-----+ :-----#------------------+ : : v *=================* v :: v | : :*=============* | *=====* *===============*::*=============* | *=====* : :!case N of S,E!-#>!use f!->!send[((W,N),E)]!-:!case N of E,S!--------#-->!use t!-------------- :*=============* v *=====* *===============*::*=============* | *=====* : : | *=======* *=======* :: | *=================* | : : | !split N!->!split W!---------+ :: +>!send[(W,S),(W,E)]!-#--+ : : | *=======* *=======* v :: *=================* v | : : | | | *======* *=====* :: | *=============* | *=====* : : | +--+ | !use no!->!use c!-+ :: +---->!case N of E,S!-#->!use t!------------ : | | v *======* *=====* v :: *=============* v *=====* : : | *======* | *=====* *===============*:: | *=======* *===============*: : | !use no!-#--->!use c!->!send[((W,N),S)]!:: +--->!use mul!->!send[(Inr W,E)]!- : | *======* | *=====* *===============*:: *=======* *===============*: : | *=======* | | :,..............................................., : +>!split W!-#----------------#------+ : : *=======* v v v : : | *=====* *===============* *======*: : +-->!use c!->!send[((W,N),E)]!->!use ia!- : *=====* *===============* *======*: ,............................................, ,....................................., ,.....|.................................., :init *======* *=====* : :calc | *=======* : : !use no!->!use e!-+ : : +>!split W!-------+ : : *======* *=====* v : : *=======* | : :*======* *=====* *===============* : : *=======* | *=======* | : :!use no!->!use e!->!send[((W,N),S)]! : ->!split W!-#>!split W!-#-----------+ : :*======* *=====* *===============* : : *=======* | *=======* v | : : | : : | | | *=======* | : -------------------------#------+ : : | | +>!use mul!-+ | : : v v : : | v *=======* v v : :*======* *===============* *======*: : | *=======* *=======* *=======*: :!use ni!->!send[((W,N),E)]!->!use ia!- : +-->!use mul!---->!use add!->!use add!- :*======* *===============* *======*: : *=======* *=======* *=======*: ,....................................., ,........................................, ,.........|...................................................., :fl | *=======* : : +>!split W!-----------------------------------+ : : *=======* | : : | *=======* *=======* | : --+ +>!split W!->!split W!--------+ | : : | *=======* *=======* | | : : | | | | | : : v v v v | : :*=================* *======* *=======* *=====* | : :!send[(N,E),(N,S)]!->!use eq!->!use and!->!use p!-+ | : :*=================* *======* *=======* *=====* v v : : | *=====* *======*: : +-------------------------->!use p!->!use la!- : *=====* *======*: ,.............................................................., ,...|........................................................................................., :la | *=======* *=======* *=======* *=======* *=================* : ----#--->!split W!-->!split W!->!split W!->!split W!---------->!send[(W,S),(W,E)]!-+ : : v *=======* *=======* *=======* *=======* *=================* | : :*=======* | | | | | | : :!split N!-+ +----+ | +----------+ v | | : :*=======* | | | | *=====* *=================* | | : : | +-----+ | +--------------+ | +>!use c!->!send[(W,S),(W,E)]!-+ | | : : v | | | | | *=====* *=================* | | | : :*=============* | | *=================* | | | | | | | : :!case N of S,E!-#-+ +>!send[(W,E),(W,S)]!-#-#-+ | +------+ | | : :*=============* | | *=================* | | | | | | : : | | | | | | | +-#--------#--+ : : | +--------+ +----------------#-+ | v | | | | : : | v | | |*=================* | | | v : : | *=======* *=============* | | |!send[(N,E),(N,S)]!--#-+ | | *=====* : : | !split N!->!case W of S,E!----+ | | |*=================* | | | +-->!use p!-+ : : | *=======* *=============* | | | v | | | | *=====* | : : | | | | | |*=================* | | | | v : : | v v | | |!send[(N,S),(N,E)]!-+ | | | | *=====* : : | *=============* *=======* | | |*=================* | | | +-#------->!use p!-+ : : | !case N of S,E!-+ !split N!-+ | | | | | | | | *=====* | : : | *=============* | *=======* | | | | v | | | | v : : v | | | | | | | *===========* | | | | *=====* : :*=======* | +--+ +---#--#-+ | +---->!send[(N,E)]!--#-#---#---#---------->!use p!------- :!split N!-+ | | v | | | *===========* | | | | *=====* : :*=======* | | | *======* | | | +-+ +-+ | | : : | | | +->!send[]! | | | | | | | : : | | v *======* | +---#--------------------#-----#-#---#------+ : : | | *=======* | | | | | | v : : | | !split N!-+ | | | | | | *=====* : : | | *=======* +-----#------#--------------------#-----#-#---#>!use p!-+ : : | | | | | | | | | *=====* | : : | | +-----------#------#----------------+ +-+ | +-+ ++ v : : | | | | | | | | | *=====* : : | +-----------------#------#----------------#-#-------#---#--#-->!use p!---+ : : v | v | | | | v *=====* | : :*=================* +-------+ *=================* | | | | *=====* | : :!send[(N,E),(N,S)]!-#-+ !send[(N,E),(N,S)]!-+ | | +---#---#>!use c!-+ | : :*=================* | | *=================* | | | | | | *=====* v | : : | | | | | | | | | | *=====* | : : | +--+ +----------#----------------#-#-#---#-+ +-+ +--->!use p!-+ | : : v | v | | | | | v *=====* | | : :*=======* | *=====================* +----+ | | | | *=====* | | : :!split N!-+ +>!send[((W,N),S),(W,E)]!-+ | | | | +->!use c!-+ | | : :*=======* | *=====================* +-#------#-#---+ *=====* | | | : : | +-------+ | | | | | | | : : v v v +-+ | | +-------+ | | : :*=============* *===========* *========* | | | | | | : :!case N of E,S!->!send[(N,E)]!->!use calc!-#----+ | | | +--------+ | : :*=============* *===========* *========* | | | | | v | : : | v | | | | *=====* | : : | *===========* | | | +>!use p!-+ | : : +----------------------------->!send[(N,E)]!-+ | | | *=====* v | : : *===========* | | | | *=====* | : : | | | +------------>!use p!-+ | : : | | | *=====* v v : : | | | *=====* *=====* : : | | +----------------->!use p!->!use p!-+ : : | | *=====* *=====* v : : | | *=================* : : | | !send[(N,E),(N,S)]!-+ : : | | *=================* v : : | | | *======*: : | +------------------------#---------->!use fl!- : | v *======*: : | *======* : : +-------------------->!use fl!------------------ : *======* : ,............................................................................................., ,................................................................., :l *=======* *=======* *=======* *=============* : -->!split W!->!split W!->!split W!->!case W of S,E! : : *=======* *=======* *=======* *=============* : : | | | | : : | | v v : : | | *=============* *=======* : : | | !case N of S,E! !split N!-+ : : | | *=============* *=======* | : : | | | | | : : | | v +------+ v : : | | *=======* | *=====* : : | | !split N!-#------------>!use p!-+ : : | | *=======* | *=====* v : : | | | | *=====* : : | +----------#--------#--------------->!use p!-+ : : | | | *=====* *=====* | : : | | +>!use e!-+ | : : | v *=====* v | : : | *======* *======* *=====* | : : | !send[]! !use ni!->!use p!-+ | : : | *======* *======* *=====* v | : : | *======* *=====* | : : | !use ni!->!use p!-+ | : : | *======* *=====* v | : : | *=====* | : : +---------------------------------------->!use p!-+ | : : *=====* v v : : *======* *=====* *======*: : !use no!->!use p!->!use la!- : *======* *=====* *======*: ,................................................................., ,.........|...................................................., :fr | *=======* : : +>!split W!-----------------------------------+ : : *=======* | : : | *=======* *=======* | : --+ +>!split W!->!split W!--------+ | : : | *=======* *=======* | | : : | | | | | : : v v v v | : :*=================* *======* *=======* *=====* | : :!send[(N,E),(N,S)]!->!use eq!->!use and!->!use p!-+ | : :*=================* *======* *=======* *=====* v v : : | *=====* *======*: : +-------------------------->!use p!->!use ra!- : *=====* *======*: ,.............................................................., ,...|........................................................................................., :ra | *=======* *=======* *=======* *=======* : ----#--->!split W!-->!split W!->!split W!->!split W!---+ : : v *=======* *=======* *=======* *=======* | : :*=======* | | | | | : :!split N!-+ +----+ | +----------+ | v : :*=======* | | | | | *=====* *=================* : : | +-----+ | +--------------+ | +--#-->!use c!->!send[(W,S),(W,E)]!-+ : : v | | | | | v *=====* *=================* | : :*=============* | | *=================* | | | *=================* | | : :!case N of S,E!-#-+ +>!send[(W,E),(W,S)]!-#-#-+ !send[(N,S),(N,E)]!---#-+ | : :*=============* | | *=================* | | *=================* | | | : : | | | | | | | | | +--+ : : | +--------+ +----------------#-+ | v | | | | : : | v | | |*=================* | | | v : : | *=======* *=============* | | |!send[(N,E),(N,S)]!--#---+ | | *=====* : : | !split N!->!case W of S,E!----+ | | |*=================* | | | +>!use p!-+ : : | *=======* *=============* | | | v | | | | *=====* | : : | | | | | |*=================* | | | | v : : | v v | | |!send[(N,S),(N,E)]!-+ | | | | *=====* : : | *=============* *=======* | | |*=================* | | | +-#----->!use p!-+ : : | !case N of S,E!-+ !split N!-+ | | | | | | | | *=====* | : : | *=============* | *=======* | | | | v | | | | v : : v | | | | | | | *===========* | | | | *=====* : :*=======* | | +-----#---#-+ | +---->!send[(N,E)]!--#-#---#-----#-------->!use p!------- :!split N!-+ | +---+ | | | | *===========* | | | | *=====* : :*=======* | | | | +-+ +---#----------------------#-#---#-----#-------+ : : | | | | v | | | | | | | : : | | | | *======* | +-+ +-----+ | | | | : : | | | +>!send[]! | | | | | | v : : | | | *======* | | | | | | *=====* : : | | | *=======* +-#---#------------------#-------#---#-----#->!use p!-+ : : | | +->!split W!---+ | | | | | | *=====* | : : | | *=======* +---#----------------+ | +---+ | | v : : | | | | | | | | | *=====* : : | +-----------#----------#----------------#-#---#-------#-----#---->!use p!-+ : : v | v | | | | | *=====* | : :*=================* | *=================* | | | | | | : :!send[(N,E),(N,S)]!-+ | !send[(N,E),(N,S)]!-----+ | | | | | | : :*=================* | | *=================* | | | | | | | : : | | | | | | | | ++ | | : : | +-#----------#--------------#-#-#-+ | | | | : : v | v | | | | | v v | : :*=======* | *=====================* | | | | | *=====* *=====* | : :!split N!---------+ +>!send[((W,N),S),(W,E)]!-#-#-#-#-#>!use c!->!use p!-+ | : :*=======* | *=====================* | | | | | *=====* *=====* | | : : | | | | | | | | | | : : v v v +----+ | | | | +----+ | : :*=============* *===========* *========* | | | | | | | : :!case N of S,E!->!send[(N,E)]!->!use calc!-#----+ | | | +--+ | | : :*=============* *===========* *========* | | | | | v v | : : | v | | | | *=====* *=====* | : : | *===========* | | | +>!use c!->!use p!-+ | : : +----------------------------->!send[(N,E)]!-+ | | | *=====* *=====* v | : : *===========* | | | | *=====* | : : | | | +-------------->!use p!-+ | : : | | | *=====* v v : : | | | *=====* *=====* : : | | +------------------->!use p!->!use p!-+ : : | | *=====* *=====* v : : | | *=================* : : | | !send[(N,E),(N,S)]!-+ : : | | *=================* v : : | | | *======*: : | +------------------------#---------->!use fr!- : | v *======*: : | *======* : : +--------------------->!use fr!----------------- : *======* : ,............................................................................................., ,................................................................., :r *=======* *=======* *=======* *=============* : -->!split W!->!split W!->!split W!->!case W of S,E! : : *=======* *=======* *=======* *=============* : : | | | | : : | | v v : : | | *=============* *=======* : : | | !case N of S,E! !split N!-+ : : | | *=============* *=======* | : : | | | | | : : | | +---#---------------+ | : : | | v v v : : | |*======* *=======* *=====* : : | |!send[]! !split N!-------------->!use p!-+ : : | |*======* *=======* *=====* v : : | | | *=====* : : | +----------#------------------------>!use p!-+ : : | | *======* *=====* | : : | | !use ni!-+ | : : | | *======* v | : : | | *=====* *=====* | : : | +--->!use e!->!use p!-+ | : : | *=====* *=====* v | : : | *======* *=====* | : : | !use ni!->!use p!-+ | : : | *======* *=====* v | : : | *=====* | : : +---------------------------------------->!use p!-+ | : : *=====* v v : : *======* *=====* *======*: : !use no!->!use p!->!use ra!- : *======* *=====* *======*: ,................................................................., ,..................................................................., :it *=======* *=================* *=======* *=======* : --->!split W!->!send[(W,E),(W,S)]!->!split W!->!split W!--+ : : *=======* *=================* *=======* *=======* v : : | | | *======* | *======* : : | | +>!send[]! | !send[]! : : v | *======* v *======* : :*=============* | *=============* *=======* : :!case N of E,S!------#---------+ !case N of E,S!->!split W!-+ : :*=============* v | *=============* *=======* v : : | *=====* *===============* | | *======*: : +->!use t!->!send[((W,N),S)]! +------------+ v !send[]!: : *=====* *===============* | *===========**======*: : | +>!send[(N,E)]!--------- : | *=====* *=====* *======* *===========* : : +->!use r!->!use l!->!use it!------------------------- : *=====* *=====* *======* : ,..................................................................., STOP ./verify raytrace raytrace.2d logout ./2d raytrace.2d ============================================================================ tests effectues: ================ ,........................................................................., :main *========* : : !use none!-+ : : *========* v : :*========* *=====* : :!use none!->!use p!-+ : :*========* *=====* v : : *========* *=====* : : !use none!->!use p!-+ : : *========* *=====* v : : *========* *=====* *=====* *========* *=====* *=====* *=====*: : !use none!->!use p!->!use e!->!use init!->!use l!->!use r!->!use l!- : *========* *=====* *=====* *========* *=====* *=====* *=====*: ,........................................................................., donne (Inr (),(Inl ((Inl (),(Inl (),(Inl (),Inl ()))),Inr ()),(Inl (Inl (),Inl (Inl (),Inr ())),Inl (Inl (),Inl (Inl (),Inr ()))))) ,................................................................, :main *========* : : !use none!-+ : : *========* v : :*========* *=====* : :!use none!->!use p!-+ : :*========* *=====* v : : *========* *=====* : : !use none!->!use p!-+ : : *========* *=====* v : : *========* *=====* *=====* *========* *=====* *=====*: : !use none!->!use p!->!use e!->!use init!->!use l!->!use r!- : *========* *=====* *=====* *========* *=====* *=====*: ,................................................................, donne (Inr (),(Inl ((Inl (),(Inl (),(Inl (),Inl ()))),Inr ()),(Inl (Inl (),Inr ()),Inl (Inl (),Inl (Inl (),Inl (Inl (),Inr ())))))) % ,......................................................., :main *========* : : !use none!-+ : : *========* v : :*========* *=====* : :!use none!->!use p!-+ : :*========* *=====* v : : *========* *=====* : : !use none!->!use p!-+ : : *========* *=====* v : : *========* *=====* *=====* *========* *=====*: : !use none!->!use p!->!use e!->!use init!->!use l!- : *========* *=====* *=====* *========* *=====*: ,......................................................., donne (Inr (),(Inl ((Inl (),(Inl (),(Inl (),Inl ()))),Inr ()),(Inl (Inl (),Inl (Inl (),Inr ())),Inl (Inl (),Inl (Inl (),Inr ()))))) ,...................................................., :main *========* : : !use none!-+ : : *========* v : :*========* *=====* : :!use none!->!use p!-+ : :*========* *=====* v : : *========* *=====* : : !use none!->!use p!-+ : : *========* *=====* v : : *========* *=====* *=====* *========* : : !use none!->!use p!->!use e!->!use init!------- : *========* *=====* *=====* *========* : ,...................................................., donne (Inr (),(Inl ((Inl (),(Inl (),(Inl (),Inl ()))),Inr ()),(Inl (Inl (),Inl (Inl (),Inr ())),Inl (Inl (),Inl (Inl (),Inr ()))))) cad (false,(cons((Away,(None,(None,None))),nil),(cons(None,cons(None,nil)),cons(None,cons(None,nil))))) cad (false,[{Away,None,None,None}],[None;None],[None;None]) mul None All = None ,.................................., :main *=======================* : : !send[(Inr Inr Inl(),E)]!-+ : : *=======================* v : :*===============* *=======*: :!send[(Inl(),E)]!------->!use mul!- :*===============* *=======*: ,.................................., mul Medium All = Medium ,.................................., :main *=======================* : : !send[(Inr Inr Inl(),E)]!-+ : : *=======================* v : :*===================* *=======*: :!send[(Inr Inl(),E)]!--->!use mul!- :*===================* *=======*: ,.................................., mul All All = All ,......................................, :main *=======================* : : !send[(Inr Inr Inl(),E)]!-+ : : *=======================* v : :*=======================* *=======*: :!send[(Inr Inr Inl(),E)]!--->!use mul!- :*=======================* *=======*: ,......................................, mul All Medium = Medium ,......................................, :main *===================* : : !send[(Inr Inl(),E)]!-----+ : : *===================* v : :*=======================* *=======*: :!send[(Inr Inr Inl(),E)]!--->!use mul!- :*=======================* *=======*: ,......................................, mul All None = None ,......................................, :main *===============* : : !send[(Inl(),E)]!-----+ : : *===============* v : :*=======================* *=======*: :!send[(Inr Inr Inl(),E)]!--->!use mul!- :*=======================* *=======*: ,......................................, eq All None = false ,....................................., :main *===============* : : !send[(Inl(),E)]!-----+ : : *===============* v : :*=======================* *======*: :!send[(Inr Inr Inl(),E)]!--->!use eq!- :*=======================* *======*: ,....................................., eq All All = true ,....................................., :main *=======================* : : !send[(Inr Inr Inl(),E)]!-----+ : : *=======================* v : :*=======================* *======*: :!send[(Inr Inr Inl(),E)]!--->!use eq!- :*=======================* *======*: ,....................................., init [()] = (false,[()],[None;None],[None;None]) ,....................................., :main : :*=======================* *========*: :!send[(Inl((),Inr()),E)]!->!use init!- :*=======================* *========*: ,.....................................,