src/Tools/SML/Examples.thy
author wenzelm
Mon, 21 Jul 2014 16:58:12 +0200
changeset 57593 2f7d91242b99
parent 56618 874bdedb2313
child 58616 4257a7f2bf39
permissions -rw-r--r--
proper Swing buttons instead of active areas within text (by Lars Hupel);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     1
(*  Title:      Tools/SML/Examples.thy
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     3
*)
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     4
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     5
header {* Standard ML within the Isabelle environment *}
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     6
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     7
theory Examples
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     8
imports Pure
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     9
begin
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    10
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    11
text {*
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    12
  Isabelle/ML is a somewhat augmented version of Standard ML, with
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    13
  various add-ons that are indispensable for Isabelle development, but
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    14
  may cause conflicts with independent projects in plain Standard ML.
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    15
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    16
  The Isabelle/Isar command 'SML_file' supports official Standard ML
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    17
  within the Isabelle environment, with full support in the Prover IDE
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    18
  (Isabelle/jEdit).
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    19
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    20
  Here is a very basic example that defines the factorial function and
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    21
  evaluates it for some arguments.
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    22
*}
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    23
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    24
SML_file "factorial.sml"
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    25
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    26
text {*
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    27
  The subsequent example illustrates the use of multiple 'SML_file'
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    28
  commands to build larger Standard ML projects.  The toplevel SML
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    29
  environment is enriched cumulatively within the theory context of
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    30
  Isabelle --- independently of the Isabelle/ML environment.
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    31
*}
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    32
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    33
SML_file "Example.sig"
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    34
SML_file "Example.sml"
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    35
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    36
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    37
text {*
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    38
  Isabelle/ML and SML share a common run-time system, but the static
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    39
  environments are separate.  It is possible to exchange toplevel bindings
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    40
  via separate commands like this.
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    41
*}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    42
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    43
SML_export {* val f = factorial *}  -- {* re-use factorial from SML environment *}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    44
ML {* f 42 *}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    45
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    46
SML_import {* val println = Output.writeln *}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    47
  -- {* re-use Isabelle/ML channel for SML *}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    48
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    49
SML_import {* val par_map = Par_List.map *}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    50
  -- {* re-use Isabelle/ML parallel list combinator for SML *}
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    51
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    52
end