# HG changeset patch # User Christian Urban # Date 1233078608 0 # Node ID 624279d187e19af95f7e61f9418b3f6e1797074a # Parent 0fb5f91d5109021ea08a4ae0bd69bb9db5c36797 some polishing diff -r 0fb5f91d5109 -r 624279d187e1 CookBook/FirstSteps.thy --- a/CookBook/FirstSteps.thy Tue Jan 27 06:15:13 2009 +0000 +++ b/CookBook/FirstSteps.thy Tue Jan 27 17:50:08 2009 +0000 @@ -517,10 +517,11 @@ \begin{readmore} The most frequently used combinator are defined in the files @{ML_file "Pure/library.ML"} - and @{ML_file "Pure/General/basics.ML"}. + and @{ML_file "Pure/General/basics.ML"}. The section ?? in the implementation manual + contains also information about combinators. \end{readmore} - The simplest combinator is @{ML I} which is just the identity function. + The simplest combinator is @{ML I}, which is just the identity function. *} ML{*fun I x = x*} @@ -530,7 +531,7 @@ ML{*fun K x = fn _ => x*} text {* - It ``wraps'' a function around the argument @{text "x"}. However, this + @{ML K} ``wraps'' a function around the argument @{text "x"}. However, this function ignores its argument. So @{ML K} defines a constant function returning @{text x}. @@ -578,7 +579,8 @@ text {* Another reason why the let-bindings in the code above are better to be - avoided: it is more than easy to get the intermediate values wrong! + avoided: it is more than easy to get the intermediate values wrong, not to + mention the nightmares the maintenance of this code causes! (FIXME: give a real world example involving theories) @@ -594,7 +596,8 @@ text {* which is the function composed of first the increment-by-one function and then - increment-by-two, followed by increment-by-three. + increment-by-two, followed by increment-by-three. Again, the reverse function + composition allows one to read the code top-down. The remaining combinators described in this section add convenience for the ``waterfall method'' of writing functions. The combinator @{ML tap} allows @@ -608,9 +611,9 @@ |> tap (fn x => tracing (makestring x)) |> (fn x => x + 2)*} -text {* increments the argument first by one and then by two. In the middle, +text {* increments the argument first by one and then by two. In the middle (Line 3), however, it uses @{ML tap} for printing the ``plus-one'' intermediate - result inside the tracing buffer (Line 3). The function @{ML tap} can only + result inside the tracing buffer. The function @{ML tap} can only be used for side-calculations, because any value that is computed cannot be merged back into the ``main waterfall''. To do this, the next combinator can be used. @@ -661,8 +664,8 @@ Recall that @{ML "|>"} is the reverse function applications. The related reverse function composition is @{ML "#>"}. In fact all combinators @{ML "|->"}, @{ML "|>>"} and @{ML "||>"} described above have related combinators for function - composition, namely @{ML "#->"}, @{ML "#>>"} and @{ML "##>"}. In this - way, the function @{text double} can also be written as + composition, namely @{ML "#->"}, @{ML "#>>"} and @{ML "##>"}. Using @{ML "|->"}, + the function @{text double} can also be written as *} ML{*val double = diff -r 0fb5f91d5109 -r 624279d187e1 CookBook/Intro.thy --- a/CookBook/Intro.thy Tue Jan 27 06:15:13 2009 +0000 +++ b/CookBook/Intro.thy Tue Jan 27 17:50:08 2009 +0000 @@ -11,7 +11,7 @@ of Isabelle programming, and to explain tricks of the trade. The code provided in the Cookbook is as far as possible checked against recent versions of Isabelle. If something does not work, then please let us - know. If you have comments or like to add to the Cookbook, + know. If you have comments, criticism or like to add to the Cookbook, feel free---you are most welcome! *} diff -r 0fb5f91d5109 -r 624279d187e1 cookbook.pdf Binary file cookbook.pdf has changed