some SML examples;
authorwenzelm
Tue, 25 Mar 2014 14:52:35 +0100
changeset 56276 9e2d5e3debd3
parent 56275 600f432ab556
child 56277 c4f75e733812
some SML examples;
NEWS
src/Pure/Tools/doc.scala
src/Tools/ROOT
src/Tools/SML/Example.sig
src/Tools/SML/Example.sml
src/Tools/SML/Examples.thy
src/Tools/SML/factorial.sml
--- a/NEWS	Tue Mar 25 13:18:10 2014 +0100
+++ b/NEWS	Tue Mar 25 14:52:35 2014 +0100
@@ -41,7 +41,8 @@
 * Command 'SML_file' reads and evaluates the given Standard ML file.
 Toplevel bindings are stored within the theory context; the initial
 environment is restricted to the Standard ML implementation of
-Poly/ML, without the add-ons of Isabelle/ML.
+Poly/ML, without the add-ons of Isabelle/ML.  See also
+~~/src/Tools/SML/Examples.thy for some basic examples.
 
 
 *** Prover IDE -- Isabelle/Scala/jEdit ***
--- a/src/Pure/Tools/doc.scala	Tue Mar 25 13:18:10 2014 +0100
+++ b/src/Pure/Tools/doc.scala	Tue Mar 25 14:52:35 2014 +0100
@@ -61,7 +61,8 @@
         "src/HOL/ex/Seq.thy",
         "src/HOL/ex/ML.thy",
         "src/HOL/Unix/Unix.thy",
-        "src/HOL/Isar_Examples/Drinker.thy")
+        "src/HOL/Isar_Examples/Drinker.thy",
+        "src/Tools/SML/Examples.thy")
     Section("Examples") :: names.map(name => text_file(name).get)
   }
 
--- a/src/Tools/ROOT	Tue Mar 25 13:18:10 2014 +0100
+++ b/src/Tools/ROOT	Tue Mar 25 14:52:35 2014 +0100
@@ -7,3 +7,8 @@
   theories [condition = ISABELLE_POLYML]
     Examples
 
+session SML in SML = Pure +
+  options [condition = ISABELLE_POLYML]
+  theories
+    Examples
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/SML/Example.sig	Tue Mar 25 14:52:35 2014 +0100
@@ -0,0 +1,6 @@
+signature Example =
+sig
+  type t
+  val a: t
+  val b: t -> t
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/SML/Example.sml	Tue Mar 25 14:52:35 2014 +0100
@@ -0,0 +1,9 @@
+structure Example :> Example =
+struct
+
+type t = int
+
+val a = 0
+fun b x = x + 1
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/SML/Examples.thy	Tue Mar 25 14:52:35 2014 +0100
@@ -0,0 +1,37 @@
+(*  Title:      Tools/SML/Examples.thy
+    Author:     Makarius
+*)
+
+header {* Standard ML within the Isabelle environment *}
+
+theory Examples
+imports Pure
+begin
+
+text {*
+  Isabelle/ML is a somewhat augmented version of Standard ML, with
+  various add-ons that are indispensable for Isabelle development, but
+  may cause conflicts with independent projects in plain Standard ML.
+
+  The Isabelle/Isar command 'SML_file' supports official Standard ML
+  within the Isabelle environment, with full support in the Prover IDE
+  (Isabelle/jEdit).
+
+  Here is a very basic example that defines the factorial function and
+  evaluates it for some arguments.
+*}
+
+SML_file "factorial.sml"
+
+
+text {*
+  The subsequent example illustrates the use of multiple 'SML_file'
+  commands to build larger Standard ML projects.  The toplevel SML
+  environment is enriched cumulatively within the theory context of
+  Isabelle --- independently of the Isabelle/ML environment.
+*}
+
+SML_file "Example.sig"
+SML_file "Example.sml"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/SML/factorial.sml	Tue Mar 25 14:52:35 2014 +0100
@@ -0,0 +1,6 @@
+fun factorial 0 = 1
+  | factorial n = n * factorial (n - 1);
+
+factorial 10;
+factorial 100;
+factorial 1000;