src/HOL/Tools/Function/function_common.ML
changeset 41417 211dbd42f95d
parent 41114 f9ae7c2abf7e
child 41846 b368a7aee46a
equal deleted inserted replaced
41414:00b2b6716ed8 41417:211dbd42f95d
   189   | No_Partials
   189   | No_Partials
   190   | Tailrec
   190   | Tailrec
   191 
   191 
   192 datatype function_config = FunctionConfig of
   192 datatype function_config = FunctionConfig of
   193  {sequential: bool,
   193  {sequential: bool,
   194   default: string,
   194   default: string option,
   195   domintros: bool,
   195   domintros: bool,
   196   partials: bool,
   196   partials: bool,
   197   tailrec: bool}
   197   tailrec: bool}
   198 
   198 
   199 fun apply_opt Sequential (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   199 fun apply_opt Sequential (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   200     FunctionConfig {sequential=true, default=default, domintros=domintros, partials=partials, tailrec=tailrec}
   200     FunctionConfig {sequential=true, default=default, domintros=domintros, partials=partials, tailrec=tailrec}
   201   | apply_opt (Default d) (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   201   | apply_opt (Default d) (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   202     FunctionConfig {sequential=sequential, default=d, domintros=domintros, partials=partials, tailrec=tailrec}
   202     FunctionConfig {sequential=sequential, default=SOME d, domintros=domintros, partials=partials, tailrec=tailrec}
   203   | apply_opt DomIntros (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   203   | apply_opt DomIntros (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   204     FunctionConfig {sequential=sequential, default=default, domintros=true, partials=partials, tailrec=tailrec}
   204     FunctionConfig {sequential=sequential, default=default, domintros=true, partials=partials, tailrec=tailrec}
   205   | apply_opt Tailrec (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   205   | apply_opt Tailrec (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   206     FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=partials, tailrec=true}
   206     FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=partials, tailrec=true}
   207   | apply_opt No_Partials (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   207   | apply_opt No_Partials (FunctionConfig {sequential, default, domintros, partials, tailrec}) =
   208     FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=false, tailrec=true}
   208     FunctionConfig {sequential=sequential, default=default, domintros=domintros, partials=false, tailrec=true}
   209 
   209 
   210 val default_config =
   210 val default_config =
   211   FunctionConfig { sequential=false, default="%x. undefined" (*FIXME dynamic scoping*), 
   211   FunctionConfig { sequential=false, default=NONE,
   212     domintros=false, partials=true, tailrec=false }
   212     domintros=false, partials=true, tailrec=false }
   213 
   213 
   214 
   214 
   215 (* Analyzing function equations *)
   215 (* Analyzing function equations *)
   216 
   216