- Record Lectures 3 1 Quizlet
- Record Lectures 3 1986
- Record Lectures 3 1 Vocabulary
- Record Lectures 3 1 Notes
I studied the traditional way. When I was in school, there used to be a blackboard, a teacher and roll-top desks in the classroom. Now with the advancements in technology, education is seeing a 180-degree shift. The teacher-centered approach is fast diminishing in relevance as more importance is thrust on student-centered learning.
Donald Clark explains why recording lectures is one of the easiest and quickest ways to use online learning to increase online attainment.Free primers on Ufi. Impact Stratigraphy. The Italian Record. Lecture Notes in Earth Sciences Series no. Berlin, Heidelberg, New York. After learning about the Balance Sheet, we're ready to move on to using journal entries to record transactions, then t-accounts to summarize transactions recorded during an accounting period. We'll apply those tools to record transactions for a fictional startup company, The Garden Spot, during its first year of operations (TGS Year 1).
This student-centered approach to using technology in education is allowing students to educate themselves efficiently and think outside of the box. Is there even a term for this approach? Yes, there is. It's called 'The Flipped Classroom.'
Click here to read about 10 Innovative ways to use technology in education
Teaching that once took place within the confines of the classroom is now moved online. In the flipped classroom method, class time is spent on discussion and in-class assignments. This approach calls for educators to either record their video lectures by making use of online video tools for teachers.
[su_quote url='https://blog.hubspot.com/blog/tabid/6307/bid/33423/19-reasons-you-should-include-visual-content-in-your-marketing-data.aspx']Studies have shown that 90% of information transmitted to the brain is visual, and they're processed 60,000 times faster in the brain than text[/su_quote]
The study also says that students are more likely to watch videos as opposed to reading a text. With an increase in access to electronic devices, students can now whip out their phone or laptop and watch lectures.
Why Should Teachers Use Videos In The Classroom?
Nxpowerlite 8 0 8 cm. Videos are the hallmark of flipped classroom or virtual classroom methodology.
- Using videos in the classroom reaches children with a variety of learning styles. Be it visual, aural, physical or verbal.
- Motivates and engage students by allowing them to learn at their own pace.
- Video allows teachers to save hours of repetitive teaching, they can even create short online courses to help students understand complex concepts.
- Help mitigate cheating and bring out the creativity in every student.
- Teachers can use videos to give personal feedback on student's work instead of being verbal.
- Students can re-watch videos anytime and anywhere when absent or during exam revision.
How Can Videos Help Students In The Classroom?
Promotes Independent Learning
Students learn better when they understand a concept on their own. Students watch video lectures and learn independently or create videos to explain a topic to their peers. Videos help students ‘learn by doing', and because of this, a student's ability to remember a topic improves.
Makes Student Future Ready
Students can apply their video skills outside of the school too. Using digital technologies like videos inside the classroom amplifies student learning abilities and augments memory retention.
Boost In-Class Engagement
Videos keep the students engaged longer and actively involved throughout the lesson. Engaged students participate more in the class, are less distracted, and retain what they've learned longer than those who weren't participating enough in the class.
Facilitates Peer-Peer Collaboration
Since video assignments are mostly a part of group activities, it allows students to help their peers and teaches them how to work collaboratively.
Which Is The Best Online Video and Lecture Tool For Video Creation And Video Editing?
There is a wide range of online video teaching tools for video creation and editing tools available that you can use to quickly create and edit videos.
Hippo Video – All-in-one Online Video Classroom Tool For Education
Hippo Video is an all-in-one online video tool for education. It takes care of the entire life cycle of video, from creating, editing, hosting, sharing to tracking. It is the one stop shop software for online virtual classroom.
It contextually integrates with Google Classroom, Google Slides, Google Docs, Gmail, and Desire2Learn LMS. Barcody 2 12 – barcode generator with linkback support. You don't have to upgrade to get these integrations. When you sign up for Hippo Video, all the integrations come along with it. You can test webcam here
Quick Video Creation And Video Editing
How to record a video lesson?
You can choose between webcam, screen record, and an audio option to start recording. Or import your videos from anywhere and start off with video editing. You can also make use of the Chrome Extension to record and narrate over your screen.
Simple Edit
Hippo Video has a quick video editor that lets you trim clips, cut, and crop videos. You can also add text, emojis, and callout to give your videos more context.
Pro Edit
It lets you add unlimited audio and video tracks, adjust clip setting, and callouts just like any professional video editor. Add introduction and end cards to the video too.
Annotate While Recording
With annotation tools, it's easy to record lessons for students. Point it out right from versatile markup options like highlight, focus, erase, pause and play to find those perfect shots.
Other Useful Features
Supports Chromebook
Supports editing in Chromebook for the benefit of educational users.
Password Protection
Set privacy and password to protect your videos. Grant only necessary video access to students.
Guest Recording
Offers guest video recording link for teachers that lets them record a video without even signing up. Students can quickly record a video assignment and send it to you for review.
Real-time analytics
You could see the stats on how many students have watched your videos and also how it is performing on different channels shared.
Handle User Permissions
Video created will be available to the whole class and stored on the cloud. You can handle user permissions as well.
Add Comments & Reactions
Both teachers and students can now add a text comment or record a video and post it as a comment on videos. You can also react to the videos with emojis.
Create GIFs
Turn your short videos into GIFs instantly.
Powtoon – Animated Presentations
With PowToon, you can create animated presentations and videos. Using animated presentations in the classroom allows teachers and students to engage, explain and tell a story with impact.
Powtoon has ready-made templates designed to start creating animations by just dragging and dropping the ones you like. It also provides you the opportunity to customize the templates and design your own with images, music, and voice-overs.
The drawback in using Powtoon is that you have to upgrade to use all of the templates, and backgrounds. With the free version you have access to basic features and it comes with a watermark.
Animoto – Slideshow Videos
With Animoto, you can turn photos and video clips into videos and slideshows. You can choose from ready-made video styles then add music, text and convert them into videos.
Teachers use Animoto to create ads for school fundraisers, event recaps, social media posts, newsletters, and announcements. In class, students can create photo essays, book reports, student portfolios, or other projects.
The downside is you can't share or download the videos you created unless you upgrade. And the sad part is, it's pricey.
Flixtime – Product-quality Videos
Flixtime is a free site where users can create custom, production-quality videos with images, videos, and text. With Flixtime, you can create, share and download a 60-second video for free.
Flixtime uses AudioMicro to provide users with a selection of award-winning tracks, sound effects, and stock music. All Flixtime video productions can be used for both personal or independent commercial use.
Screenr – Annotated Screenshots
With Screenr, you can screen capture and annotate easily. Instead of pointing out what you want to convey with arrows and highlighters, type your comments on the side panel next to the screenshot and share them. It supports PNG format. Once the annotation is done, you have to upload your screenshot to get a shareable link.
Webineria
Webineria is a downloadable screencast tool with which you can capture your screen activity and do 'picture-in-picture' video by adding your webcam as well.
You can upload your videos to the web in Flash format for free. You can alter the screen capture area from your active window to a customized area, and you can also adjust the recording quality, edit the audio and webcam properties.
Convert from an AVI file to FLV using the latest compression technology, and upload to the Flash player. You can host all your videos for free and receive ratings, comments and generate leads for your website screencast or presentation.
Your videos are saved in the tool and you can only share via emails or you can directly embed them on your school or personal website.
CamStudio
CamStudio is a downloadable software that lets you record your screen along with audio. Videos created with CamStudio produce AVI or SWF format outputs.
Record Lectures 3 1 Quizlet
You can use annotation features like adding text, inserting callouts and even cursor options like default, hidden or highlight while recording your screen.
You can convert AVI files into Flash. And CamStudio comes with its own lossless codec that produces crystal clear results with a much smaller file size compared with some popular codecs, like Microsoft Video 1.
The downside of this tool is that there are no video editing capabilities. You can only record your screen and share it with your students. There are few video options like control compression, frame rates, quality and time lapse, but it's too technical to use it.
With video tools like these teachers can bring education to life, either by creating their own content to make the classroom and curriculum more vivid and engaging, or by encouraging students to unleash their own creativity.
Different Types of Online Video Teaching Tools To Use In The Classroom
Live Lecture Videos – How to record yourself teaching?
For many teachers, flipping the classroom begins with live recording their lectures. Sending recorded lectures to students allows them to pause and rewatch if they didn't understand it the first time. With recorded lectures, students will be able to pause the video, rewatch the lesson multiples times according to their learning pace and needs.
You don't have to record teaching videos inside the classroom alone. You can record your lectures and share them with your students anytime and from anywhere. This is how you make quick teaching videos.
Recording lectures before the class can help you close the gap that might result from your absence sometimes. If you are planning a vacation or experiencing prolonged illness, you don't have to worry about missing the classes. With pre-recorded lectures, you can keep the class running even in your absence.
With the help of a online lecture software or tool – you will be able to walk in front of the webcam, press record, and start lecturing.
Mini Screen Recording Videos – How to make online teaching videos?
A lot of teachers like you must have tried recording their screen in an attempt to lecture. It's an entirely popular means of creating videos among teachers around the world. If you're one who knows nothing about screen recording, here is what it is.
Record Lectures 3 1986
Screen recording lets you record everything with/without audio that appears on your screen. It allows you to create mini-lectures by narrating over the screen.
Recording your screen is a piece of cake now with the advent of browser-based video tools. With such tools, you will be able to create professional screen recordings and share it with your students instantly.
Screen recording videos are created especially for hard-to-grasp concepts so students can view them multiple times. It saves you valuable class time and helps engage your students in the classroom.
Video Presentations – How to record video lessons?
As you explore better ways to increase the engagement rate between students and teachers, recording video presentations can be a good choice. Effective presentation and communication skills that students develop in school are among the most valuable assets they take into the workplace.
Instead of driving students to work on a quiz or exams, you could ask them to create a video presentation on what they've learned. And with the rate at which educational technology is growing, creating an excellent video presentation is faster than ever.
Recording video presentation has the following benefits for your students:
- Video presentation helps the student think creatively.
- It helps the student express their opinion verbally and prepare bullet-point notes instead of keeping it writing focused.
- It helps the student overcome the anxiety of public speaking in the long run.
Video Assignments
Forget about writing essays, reading assignments and other types of ‘homework'. Video assignments are the way to go. Asking students to do their assignments in the form of video can help them immerse themselves in a topic deeply and naturally.
Video assignments make students work collaboratively. It exhibits student knowledge and effective communication skills.
What kind of video assignments can students create?
- Ask students to find web videos that talks about the same thing discussed in class. Then ask them to create their video version of what they learned. This makes students think out of the box and get a diverse knowledge on the subject.
- Instead of asking students to write assignments, ask them to create a video instead. This will help them learn how to use digital technologies and use them to present their original thoughts.
- Asking students to record a spoken essay instead of a written assignment can be useful as well. It helps a student become effective communicators and prepare them for the real world.
So what's your favorite online video tools for video creation and editing tool? Have you used any of the listed online video tools before? Tell us how you make videos for online teaching, what tools do you use and we will include them in our article. Comment below or feel free to tweet to us @thehippovideo
- SaaStories: The Story of Hippo Video - November 25, 2020
- Learn Tibor's secret for call-backs from voicemails under 72 hrs - November 9, 2020
- Building a Multitasking Sales Team - November 9, 2020
- SML Lists
- Recursive datatypes
- Implementing lists with recursive datatypes
- Other uses of recursive datatypes: trees, etc.
Lists
So far the only real data structures we can build are made of tuples. But tuples don't let us make data structures whose size is not known at compile time. For that we need a new language feature. One simple data structure that we're used to is singly linked lists. It turns out that SML has lists built in. For example, in SML the expression []
is an empty list. The expression [1,2,3]
is a list containing three integers. Another name for the empty list is nil
. This is just the same thing as []
.
In SML, all the elements of a list have to have the same type. For example, a list of integers has the type int list
. Similarly, the list ['hi', 'there', '312']
would have the type string list
. But [1, 'hi']
is not a legal list. Lists in SML are therefore homogeneous lists, as opposed to heterogeneous lists in which each element can have a different type.
Lists are immutable: you cannot change the elements of a list, unlike an array in Java.
Constructing lists
Often we want to make a list out of smaller lists. We can concatenate two lists with the @
operator. For example, [1,2,3] @ [4,5,6]
= [1,2,3,4,5,6]
. However, this operator isn't very fast because it needs to build a copy of the entire first list. More often we use the ::
operator, which prepends an element to the front of an existing list ('prepend' means 'append onto the front'). The expression 1::[2,3]
is 1
prepended onto the list [2,3]
. This is just the list [1,2,3]
. For historical reasons going back to the language Lisp, we usually call the ::
operator 'cons'.
The fact that lists are immutable is in keeping with SML being a functional language. It is also actually useful for making SML more efficient, because it means that different list data structures can share parts of their representation in the computer's memory. For example, evaluating h::t
only requires allocating space for a single extra list node in the computer's memory. It shares the rest of the list with the existing list t
.
Pattern matching on lists
The best way to extract elements from a list is to use pattern matching. The operator ::
and the bracket constructor can be used as patterns in a case
expression. For example, if we wanted to get the value 1 if we had a list of one element, and zero if we had an empty list, we could write:
Here, x
would be bound to the single element of the list if the second case arm were evaluated.
Often, functions that manipulate lists are recursive, because they need to do something to every element. For example, suppose that we wanted to compute the length of a list of strings. We could write a recursive function that accomplishes this (in fact, the library function List.length
does just this):
The logic here is that if a list is empty ([]
), its length is clearly zero. Otherwise, if it is the appending of an element h onto another list t, its length must be one greater than the length of t.
It's possible to write patterns using the bracket syntax. This is exactly the same as writing a similar pattern using the ::
operator. For example, the following patterns are all equivalent: [x,2]
, x::2::nil
, x::2::[]
, x::[2]
. These expressions are also all equivalent when used as terms.
Library functions
The SML structure List
contains many useful functions for manipulating lists. Before using lists, it's worth taking a look. Some of them we'll talk about later in more detail. Two functions that should be used with caution are hd
and tl
. These functions get the head and tail of a list, respectively. However, they raise an exception if applied to an empty list. They make it easy to forget about the possibility that the list might be empty, creating expected exceptions that crash your program. So it's usually best to avoid them.
List examples
We can use pattern matching to implement other useful functions on lists. Suppose we wanted a function that would extract a list element by its index within the list, with the first element at index zero. We can implement this neatly by doing a pattern match on the list and the integer n at the same time:Recursive datatypes
Lists are very useful, but it turns out they are not really as special as they look. We can implement our own lists, and other more interesting data structures, such as binary trees.
In recitation you saw some simple examples of datatypes, which are SML types that can have more than one kind of value. This involved a new kind of declaration, a datatype declaration (where we've written brackets like this to indicate optional syntax: [ ])
datatype
Y= X1[of
t1] | .. |Xn [of
tn]
and new term and pattern forms:
e ::= .. |X(
e)
|case
e of
p1=>
e1| .. | pn=>
en
p ::= X |X(
x1:t1..,
xn:tn)
Note that the vertical bars in the expression 'case
e of
p1=>
e1 | .. | pn=>
en' are part the syntax of this construct; the other vertical bars (|) are part of the BNF notation. We can use datatypes to define many useful data structures. We saw in recitation that the bool
type is really just a datatype, so we don't need to have booleans built into SML the way we do in Java.
Implementing integer lists
We can write our own version of lists using datatypes. Suppose we want to define values that act like linked lists of integers. A linked list is either empty, or it has an integer followed by another list containing the rest of the list elements. This leads to a very natural datatype declaration:This datatype has two constructors, Nil
and Cons
. It is a recursive datatype because it mentions itself in its own definition (in the Cons
constructor), just like a recursive function is one that mentions itself in its own definition.
Any list of integers can be represented by using this datatype. For example, the empty list is just the constructor Nil
, and Cons
corresponds to the operator ::
. Here are some examples of lists: Reveal sound spire v1 1 12 vst mac.
So we can construct any lists we want. We can also take them apart using pattern matching. For example, our length
function above can be written for our lists by just translating the list patterns into the corresponding patterns using datatype constructors:
In fact, if we want our lists to look even more like SML lists, we could even overload the ::
operator.
Operator overloading can be convenient, but it is also dangerous because it can confuse someone trying to read the code. This particular use is probably not worth it.
Representing trees with a recursive datatype
Record Lectures 3 1 Vocabulary
Trees are another very useful data structure, and unlike lists, they are not built into SML. A binary tree is a node containing a value and two children that are trees. A binary tree can also be an empty tree, which we also use to represent the absence of a child node. We can write this down directly as a datatype:
We can use this datatype to represent any binary tree:
Because there are several things stored in a tree node, it's helpful to use a record rather than a tuple to keep them all straight. But a tuple would also have worked.
We can use pattern matching to write the usual algorithms for recursively traversing trees. For example, here is a recursive search over the tree:
Of course, if we knew the tree obeyed the binary search tree invariant, we could have written a more efficient algorithm.
Representing natural numbers with a recursive datatype
We can even define data structures that act like numbers, demonstrating that we don't really have to have numbers built into SML either! A natural number is either the value zero or the successor of some other natural number. This definition leads naturally to the following definition for values that act like natural numbers nat
:
It's possible to write patterns using the bracket syntax. This is exactly the same as writing a similar pattern using the ::
operator. For example, the following patterns are all equivalent: [x,2]
, x::2::nil
, x::2::[]
, x::[2]
. These expressions are also all equivalent when used as terms.
Library functions
The SML structure List
contains many useful functions for manipulating lists. Before using lists, it's worth taking a look. Some of them we'll talk about later in more detail. Two functions that should be used with caution are hd
and tl
. These functions get the head and tail of a list, respectively. However, they raise an exception if applied to an empty list. They make it easy to forget about the possibility that the list might be empty, creating expected exceptions that crash your program. So it's usually best to avoid them.
List examples
We can use pattern matching to implement other useful functions on lists. Suppose we wanted a function that would extract a list element by its index within the list, with the first element at index zero. We can implement this neatly by doing a pattern match on the list and the integer n at the same time:Recursive datatypes
Lists are very useful, but it turns out they are not really as special as they look. We can implement our own lists, and other more interesting data structures, such as binary trees.
In recitation you saw some simple examples of datatypes, which are SML types that can have more than one kind of value. This involved a new kind of declaration, a datatype declaration (where we've written brackets like this to indicate optional syntax: [ ])
datatype
Y= X1[of
t1] | .. |Xn [of
tn]
and new term and pattern forms:
e ::= .. |X(
e)
|case
e of
p1=>
e1| .. | pn=>
en
p ::= X |X(
x1:t1..,
xn:tn)
Note that the vertical bars in the expression 'case
e of
p1=>
e1 | .. | pn=>
en' are part the syntax of this construct; the other vertical bars (|) are part of the BNF notation. We can use datatypes to define many useful data structures. We saw in recitation that the bool
type is really just a datatype, so we don't need to have booleans built into SML the way we do in Java.
Implementing integer lists
We can write our own version of lists using datatypes. Suppose we want to define values that act like linked lists of integers. A linked list is either empty, or it has an integer followed by another list containing the rest of the list elements. This leads to a very natural datatype declaration:This datatype has two constructors, Nil
and Cons
. It is a recursive datatype because it mentions itself in its own definition (in the Cons
constructor), just like a recursive function is one that mentions itself in its own definition.
Any list of integers can be represented by using this datatype. For example, the empty list is just the constructor Nil
, and Cons
corresponds to the operator ::
. Here are some examples of lists: Reveal sound spire v1 1 12 vst mac.
So we can construct any lists we want. We can also take them apart using pattern matching. For example, our length
function above can be written for our lists by just translating the list patterns into the corresponding patterns using datatype constructors:
In fact, if we want our lists to look even more like SML lists, we could even overload the ::
operator.
Operator overloading can be convenient, but it is also dangerous because it can confuse someone trying to read the code. This particular use is probably not worth it.
Representing trees with a recursive datatype
Record Lectures 3 1 Vocabulary
Trees are another very useful data structure, and unlike lists, they are not built into SML. A binary tree is a node containing a value and two children that are trees. A binary tree can also be an empty tree, which we also use to represent the absence of a child node. We can write this down directly as a datatype:
We can use this datatype to represent any binary tree:
Because there are several things stored in a tree node, it's helpful to use a record rather than a tuple to keep them all straight. But a tuple would also have worked.
We can use pattern matching to write the usual algorithms for recursively traversing trees. For example, here is a recursive search over the tree:
Of course, if we knew the tree obeyed the binary search tree invariant, we could have written a more efficient algorithm.
Representing natural numbers with a recursive datatype
We can even define data structures that act like numbers, demonstrating that we don't really have to have numbers built into SML either! A natural number is either the value zero or the successor of some other natural number. This definition leads naturally to the following definition for values that act like natural numbers nat
:
This is how you might define the natural numbers in a mathematical logic course. We have defined a new type nat
, and Zero
and Succ
are constructors for values of this type. This datatype is different than the ones we saw in recitation: the definition of nat
refers to nat
itself. In other words, this is a recursive datatype. This allows us to build expressions that have an arbitrary number of nested Succ
constructors. Such values act like natural numbers:
When we ask the compiler what four represents, we get
Thus four is a nested data structure. The equivalent Java definitions would be
And in fact the Java objects representing the various numbers are actually implemented similarly to the SML values representing the corresponding numbers.
Now we can write functions to manipulate values of this type.
The case expression allows us to do pattern matching on expressions. Here we're pattern-matching a value of type nat
. If the value is Zero
we evaluate to true
; otherwise we evaluate to false
.
Here we determine the predecessor of a number. If the value of n
matches Zero
then we raise an exception, since zero has no predecessor in the natural numbers. If the value matches Succ(m)
for some value m
(which of course also must be of type nat
), then we return m
.
Similarly we can define a function to add two numbers: (See if the students can come up with this with some coaching.)
If you were to try evaluating add(four,four)
, the compiler would respond with:
The compiler correctly performed the addition, but it has abbreviated the output because the data structure is nested so deeply. To easily understand the results of our computation, we would like to convert such values to type int
:
That was pretty easy. Now we can write toInt(add(four,four))
and get 8. How about the inverse operation?
To determine whether a natural number is even or odd, we can write a pair of mutually recursive functions:
You have to use the keyword and
to combine mutually recursive functions like this. Otherwise the compiler would flag an error when you refer to odd
before it has been defined.
Finally we can define multiplication in terms of addition. (See if the students can figure this out.)
Deep pattern matching
It turns out that the syntax of ML patterns is richer than what we saw in the last lecture. In addition to new kinds of terms for creating and projecting tuple and record values, and creating and examining datatype values, we also have the ability to match patterns against values to pull them apart into their parts.
When used properly, ML pattern matching leads to concise, clear code. This is because ML supports deep pattern matching in which one pattern can appear as a subexpression of another pattern. For example, we see above that Succ(n)
is a pattern, but so is Succ(Succ(n))
. This second pattern matches only on a value that has the form Succ(Succ(
v))
for some value v (that is, the successor of the successor of something), and binds the variable n
to that something, v.
Similarly, in our implementation of the nth
function, earlier, a neat trick is to use deep pattern matching to do the if n=0
and the case
at the same time. We pattern-match on the tuple (lst, n)
:
Here, we've also added a clause to catch the empty list and raise an exception. We're also using the wildcard pattern _
to match on the n
component of the tuple, because we don't need to bind the value of n
to another variable—we already have n
. We can make this code even shorter; can you see how?
Example: pattern matching on records
Record Lectures 3 1 Notes
Natural numbers aren't quite as good as integers, but we can simulate integers in terms of the naturals by using a representation consisting of a sign and magnitude:
The type
keyword simply defines a name for a type. Here we've defined integer to refer to a record type with two fields: sign and mag. Remember that records are unordered, so there is no concept of a 'first' field.
Note that a type
declaration is different from a datatype
declaration; it creates a new way to name an existing type, whereas a datatype
declaration creates a new type and also happens to give it a name, which is needed to support recursion. For example, we could write a declarationtype natural = nat
. The type natural
and nat
would then be exactly the same type and usable interchangeably.
We can use the definition of integer
to write some integers:
Now we can write a function to determine the successor of any integer:
Here we're pattern-matching on a record type. Notice that in the third pattern we are doing deep pattern matching because the mag
field is matched against a pattern itself, Succ(n)
. Remember that the patterns are tested in order. How does the meaning of this function change if the first two patterns are swapped?
The predecessor function is very similar, and it should be obvious that we could write functions to add, subtract, and multiply integers in this representation.
SML syntax
Taking into account the ability to write complex patterns, we can now write down a more complete syntax for SML.
syntactic class | syntactic variables and grammar rule(s) | examples |
---|---|---|
identifiers | x, y | a , x , y , x_y , foo1000 , .. |
datatypes, datatype constructors | X, Y | Nil , Cons , list |
constants | c | ..~2 , ~1 , 0 , 1 , 2 (integers)1.0 , ~0.001 , 3.141 (reals)true , false (booleans) 'hello' , ' , '!' (strings) #'A' , #' ' (characters) |
unary operator | u | ~ , not , size , .. |
binary operators | b | + , * , - , > , < , >= , <= , ^ , .. |
expressions (terms) | e ::= c | x | u e | e1 b e2 | if e1then e2else e3 | let d1..dnin eend | e( e1, .., en) | ( e1, .., en) | # n e | { x1= e1, .., xn= en} | # x e | X( e) | case e of p1=> e1| .. | pn=> en | ~0.001 , foo , not b , 2 + 2 , Cons(2, Nil) |
patterns | p ::= c | x | | a:int , (x:int,y:int), I(x:int) |
declarations | d ::= val p = e |fun y p : t = e | da tatype Y= X1[of t1]| .. | Xn [of tn] | val one = 1 |
types | t ::= int | real | bool | string | char | t1-> t2 | t1* ..* tn | { x1:t1, x2:t2,.., xn:tn} | Y | int , string , int->int , bool*int->bool |
values | v ::= c | ( v1, .., vn) | { x1= v1, .., xn= vn} | X( v) | 2 , (2,'hello') , Cons(2,Nil) |
Note: pattern-matching real constants is not possible. So in the production 'p ::= c | .' above, c is an integer, boolean, string, or character constant, but not real.