Notes from 341 quiz section (9/30/97) ===================================== * admin - course web: http://www.cs.washington.edu/education/courses/cse341 - subscribe to mailing list - e-mail (put 341 somewhere in subject line, please!) * running ML (SML/NJ) - use xterms (e.g. orcas.cs.washington.edu) in Sieg 329 - add sml's path in .cshrc (or .mycshrc) set path = (\$path "/cse/courses/misc_lang/axp/sml/bin") - type "sml" - exit with -d - loading files - use("myfile.sml"); (at SML prompt) - sml < "myfile.sml" (from command line) * basic types - integers (int) - reals (real) - booleans: true, false (bool) - strings (string) - characters (char) - new addition, NOT in ML book! - #"b" * declaring types - shown with `:' followed by type - "x : int" is a variable of type integer * arithmetic operators - usual for math: + - * - integer division: mod div - real division: / * lists - examples - [1, 2, 3] - [] = empty list, also written: nil - [["homer", "marge"], ["bart"]] - elements must be same type! - operators - append (@) - combines two lists - [1,2] @ [3,4] = [1,2,3,4] - functions - cons (::) - prepends an element onto a list - 1 :: [2,3,4] = [1,2,3,4] - head (hd) - return first element - hd([1,2,3,4]) = 1 (not [1]!) - tail (tl) - return everything but first element - tl([1,2,3,4]) = [2,3,4] - null - check for empty list - null([]) = true, null([5,6]) = false * strings and characters - concat (^) -- "ab" ^ "cd" = "abcd" - explode - turns a string into a list of characters - explode("hi") = [#"h", #"i"] - implode (inverse of explode) - ord - ascii value of a character -- ord(#"a") = 97 - chr (inverse of ord) * functions - expect lots of recursion - fun double(x) = 2 * x; - valid, but only works for integers - fun square(x) = x * x; - NOT valid -- can't infer whether x is integer or real - this would work: fun square(x:int) = x * x; * comments - "(*" at the beginning, "*)" at the end * ML quirks - unary negation written ~5, not -5 - boolean operators - "andalso" and "orelse", instead of "and" and "or" - beware: "and" *is* a keyword, but has another meaning - if-then-else - MUST have the "else" part - similar to C's construct: if a ? b : c; - parentheses in function calls are optional (e.g. "F x" means "F(x)") * reading - above notes taken from ch. 0-5 in blue ML book