X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week1.mdwn;h=b581db1b5429c6ae3559b6fa2c2cc2e86af6598b;hp=92bf533c652b8e6eb9642ad54cf3497bd35e0bc4;hb=9f92c70ab51c8e2bcc57f5eac7c31841984142b9;hpb=615a1769f22e2395ecf958634e916b8ea7b5b63f diff --git a/week1.mdwn b/week1.mdwn index 92bf533c..b581db1b 100644 --- a/week1.mdwn +++ b/week1.mdwn @@ -431,13 +431,17 @@ Here's how it looks to say the same thing in various of these languages. int x = 3; x = 2; - *but it's not the same!* In the latter case we have mutation, in the former case we don't. You will learn to recognize the difference as we proceed. + but it's not the same! In the latter case we have mutation, in the former case we don't. You will learn to recognize the difference as we proceed. The OCaml expression just means: (fun x -> ((fun x -> x) 2) 3) - and there's no more change of state going on here than there is in &exists;x. (F x and &exists;x (not (F x))). + and there's no more mutation going on there than there is in: + +
+	∀x. (F x or ∀x (not (F x)))
+	
Some more comparisons between Scheme and OCaml @@ -445,47 +449,47 @@ Some more comparisons between Scheme and OCaml 11. Simple predefined values - Numbers in Scheme: 2, 3 - In OCaml: 2, 3 + Numbers in Scheme: `2`, `3` + In OCaml: `2`, `3` - Booleans in Scheme: #t, #f - In OCaml: true, false + Booleans in Scheme: `#t`, `#f` + In OCaml: `true`, `false` - The eighth letter in the Latin alphabet, in Scheme: #\h - In OCaml: 'h' + The eighth letter in the Latin alphabet, in Scheme: `#\h` + In OCaml: `'h'` 12. Compound values These are values which are built up out of (zero or more) simple values. - Ordered pairs in Scheme: '(2 . 3) - In OCaml: (2, 3) + Ordered pairs in Scheme: `'(2 . 3)` + In OCaml: `(2, 3)` - Lists in Scheme: '(2 3) - In OCaml: [2; 3] + Lists in Scheme: `'(2 3)` + In OCaml: `[2; 3]` We'll be explaining the difference between pairs and lists next week. - The empty list, in Scheme: '() - In OCaml: [] + The empty list, in Scheme: `'()` + In OCaml: `[]` - The string consisting just of the eighth letter of the Latin alphabet, in Scheme: "h" - In OCaml: "h" + The string consisting just of the eighth letter of the Latin alphabet, in Scheme: `"h"` + In OCaml: `"h"` - A longer string, in Scheme: "horse" - In OCaml: "horse" + A longer string, in Scheme: `"horse"` + In OCaml: `"horse"` - A shorter string, in Scheme: "" - In OCaml: "" + A shorter string, in Scheme: `""` + In OCaml: `""` 13. Function application - Binary functions in OCaml: foo 2 3 + Binary functions in OCaml: `foo 2 3` - Or: ( + ) 2 3 + Or: `( + ) 2 3` - These are the same as: ((foo 2) 3). In other words, functions in OCaml are "curried". foo 2 returns a 2-fooer, which waits for an argument like 3 and then foos 2 to it. ( + ) 2 returns a 2-adder, which waits for an argument like 3 and then adds 2 to it. + These are the same as: `((foo 2) 3)`. In other words, functions in OCaml are "curried". `foo 2` returns a `2`-fooer, which waits for an argument like `3` and then foos `2` to it. `( + ) 2` returns a `2`-adder, which waits for an argument like `3` and then adds `2` to it. - In Scheme, on the other hand, there's a difference between ((foo 2) 3) and (foo 2 3). Scheme distinguishes between unary functions that return unary functions and binary functions. For our seminar purposes, it will be easiest if you confine yourself to unary functions in Scheme as much as possible. + In Scheme, on the other hand, there's a difference between `((foo 2) 3)` and `(foo 2 3)`. Scheme distinguishes between unary functions that return unary functions and binary functions. For our seminar purposes, it will be easiest if you confine yourself to unary functions in Scheme as much as possible. Additionally, as said above, Scheme is very sensitive to parentheses and whenever you want a function applied to any number of arguments, you need to wrap the function and its arguments in a parentheses.