ProgTutorial/First_Steps.thy
changeset 462 1d1e795bc3ad
parent 458 242e81f4d461
child 466 26d2f91608ed
equal deleted inserted replaced
460:5c33c4b52ad7 462:1d1e795bc3ad
   535   then increment-by-two, followed by increment-by-three. Again, the reverse
   535   then increment-by-two, followed by increment-by-three. Again, the reverse
   536   function composition allows you to read the code top-down. This combinator
   536   function composition allows you to read the code top-down. This combinator
   537   is often used for setup functions inside the
   537   is often used for setup functions inside the
   538   \isacommand{setup}-command. These functions have to be of type @{ML_type
   538   \isacommand{setup}-command. These functions have to be of type @{ML_type
   539   "theory -> theory"}. More than one such setup function can be composed with
   539   "theory -> theory"}. More than one such setup function can be composed with
   540   @{ML "#>"}. For example
   540   @{ML "#>"}.\footnote{give example} 
   541 *}
       
   542 
       
   543 setup %gray {* let
       
   544   val (ival1, setup_ival1) = Attrib.config_int "ival1" (K 1)
       
   545   val (ival2, setup_ival2) = Attrib.config_int "ival2" (K 2)
       
   546 in
       
   547   setup_ival1 #>
       
   548   setup_ival2
       
   549 end *}
       
   550 
       
   551 text {*
       
   552   after this the configuration values @{text ival1} and @{text ival2} are known
       
   553   in the current theory and can be manipulated by the user (for more information 
       
   554   about configuration values see Section~\ref{sec:storing}, for more about setup 
       
   555   functions see Section~\ref{sec:theories}). 
       
   556   
   541   
   557   The remaining combinators we describe in this section add convenience for the
   542   The remaining combinators we describe in this section add convenience for the
   558   ``waterfall method'' of writing functions. The combinator @{ML_ind tap in
   543   ``waterfall method'' of writing functions. The combinator @{ML_ind tap in
   559   Basics} allows you to get hold of an intermediate result (to do some
   544   Basics} allows you to get hold of an intermediate result (to do some
   560   side-calculations for instance). The function
   545   side-calculations for instance). The function
  1306   user to control three values, say @{text bval} containing a boolean, @{text
  1291   user to control three values, say @{text bval} containing a boolean, @{text
  1307   ival} containing an integer and @{text sval} containing a string. These
  1292   ival} containing an integer and @{text sval} containing a string. These
  1308   values can be declared by
  1293   values can be declared by
  1309 *}
  1294 *}
  1310 
  1295 
  1311 ML{*val (bval, setup_bval) = Attrib.config_bool "bval" (K false)
  1296 ML{*val bval = Attrib.setup_config_bool @{binding "bval"} (K false)
  1312 val (ival, setup_ival) = Attrib.config_int "ival" (K 0)
  1297 val ival = Attrib.setup_config_int @{binding "ival"} (K 0)
  1313 val (sval, setup_sval) = Attrib.config_string "sval" (K "some string") *}
  1298 val sval = Attrib.setup_config_string @{binding "sval"} (K "some string") *}
  1314 
  1299 
  1315 text {* 
  1300 text {* 
  1316   where each value needs to be given a default. To enable these values on the 
  1301   where each value needs to be given a default. 
  1317   user-level, they need to be set up with
       
  1318 *}
       
  1319 
       
  1320 setup %gray {* 
       
  1321   setup_bval #> 
       
  1322   setup_ival #>
       
  1323   setup_sval
       
  1324 *}
       
  1325 
       
  1326 text {*
       
  1327   The user can now manipulate the values from the user-level of Isabelle 
  1302   The user can now manipulate the values from the user-level of Isabelle 
  1328   with the command
  1303   with the command
  1329 *}
  1304 *}
  1330 
  1305 
  1331 declare [[bval = true, ival = 3]]
  1306 declare [[bval = true, ival = 3]]