test/Tools/isac/ADDTESTS/course/ml_quickstart/ML4_Datastructure.thy
author wneuper <Walther.Neuper@jku.at>
Sun, 09 Oct 2022 07:44:22 +0200
changeset 60565 f92963a33fe3
parent 59592 99c8d2ff63eb
permissions -rw-r--r--
eliminate term2str in test/*
wneuper@59353
     1
(* Quick introduction to ML, session 3 *)
neuper@42088
     2
wneuper@59592
     3
theory ML4_Datastructure imports Isac.Isac_Knowledge begin
neuper@42088
     4
wneuper@59472
     5
text\<open>This course follows the book:
neuper@42088
     6
J.D.Ullmann, Elements of ML Programming. Prenctice Hall 1998.
wneuper@59472
     7
Contents:\<close>
neuper@42088
     8
wneuper@59472
     9
text \<open>
neuper@42088
    10
  datastructures are tuples and list already introduced, and two further datastructures in ML,
neuper@42088
    11
  records and "datatypes"
wneuper@59472
    12
\<close>
wneuper@59472
    13
section \<open>7.1 Record Structures\<close>
neuper@42088
    14
wneuper@59472
    15
ML \<open>
neuper@42088
    16
val wn = {firstname = "Walther", lastname = "Neuper", age = 62, male = true};
neuper@42088
    17
val tl = {firstname = "Thomas", lastname = "Leh", age = 17, male = true};
neuper@42088
    18
wn = tl;
neuper@42088
    19
val {firstname, ...} = tl;
neuper@42088
    20
val {firstname = n, ...} = tl;
neuper@42088
    21
val {age, ...} = tl;
neuper@42088
    22
val {age = tage, ...} = tl;
wneuper@59472
    23
\<close>
neuper@42088
    24
wneuper@59472
    25
section \<open>6.2 Datatypes\<close>
wneuper@59472
    26
ML \<open>
neuper@42088
    27
infix +++ ***;
neuper@42088
    28
datatype formula = 
neuper@42088
    29
    Num of int
neuper@42088
    30
  | Var of string
neuper@42088
    31
  | op +++ of formula * formula
neuper@42088
    32
  | op *** of formula * formula;
wneuper@59472
    33
\<close>
wneuper@59472
    34
ML \<open>
neuper@42088
    35
(Num 2 *** Num 3) +++ Num 4;
neuper@42088
    36
(Num 2 *** Num 3) +++ ((Num 2 *** Num 3) +++ Num 4);
neuper@42088
    37
2;
neuper@42088
    38
Num 2;
neuper@42088
    39
(Num 2 *** Var "x") +++ ((Num 2 *** Num 3) +++ Var "c");
wneuper@59472
    40
\<close>
neuper@42088
    41
wneuper@59472
    42
section \<open>Preview to Isabelle's terms\<close>
wneuper@59472
    43
ML \<open>
Walther@60565
    44
parse_test @{context};
Walther@60565
    45
parse_test @{context} "234 * bbb + ccc";
wneuper@59472
    46
\<close>
neuper@42088
    47
wneuper@59472
    48
ML \<open>
neuper@42088
    49
@{term "5"}
wneuper@59472
    50
\<close>
neuper@42088
    51
end