N Best Programming Techniques
From Compsci.ca Wiki
(Difference between revisions)
		
		
| m | |||
| (18 intermediate revisions not shown) | |||
| Line 1: | Line 1: | ||
| Ten best programming techniques you're (probably) not using. | Ten best programming techniques you're (probably) not using. | ||
| - | # '''Pattern matching''' | + | |
| + | <!--# '''Pattern matching''' | ||
| #* Examples: | #* Examples: | ||
| #** Common Lisp (destructuring-bind) | #** Common Lisp (destructuring-bind) | ||
| Line 13: | Line 14: | ||
| #** Java/Scala | #** Java/Scala | ||
| #** O'Caml/Haskell | #** O'Caml/Haskell | ||
| - | # Regular expressions | + | # '''Regular expressions''' | 
| + | # '''Anonymous functions/closures'''--> | ||
| + | |||
| + | __TOC__ | ||
| + | |||
| + | =Pattern matching= | ||
| + | |||
| + | ==Common Lisp (destructuring-bind)== | ||
| + | |||
| + | <pre>[1]> (defun foo (a-list) | ||
| + |         (destructuring-bind (a &rest b) a-list | ||
| + |            (list a b))) | ||
| + | FOO | ||
| + | [2]> (foo '(1 2 3 4)) | ||
| + | (1 (2 3 4)) | ||
| + | [3]></pre> | ||
| + | |||
| + | ==Erlang== | ||
| + | <pre>-module(example). | ||
| + | -export(hello/1]). | ||
| + | |||
| + | hello("wtd") -> | ||
| + |     io:format("Hello, ~s!~n", [Name]); | ||
| + | |||
| + | hello(Name) -> | ||
| + |     io:format("Get out!!~n", []).</pre> | ||
| + | |||
| + | ==Scala== | ||
| + | <pre> | ||
| + | def fact(n : int) : int = n match { | ||
| + |     case 0 => 1 | ||
| + |     case _ => n * fact(n - 1) | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | ==Haskell== | ||
| + | <pre> | ||
| + | fact 0 = 1 | ||
| + | fact n = n * (fact $ n - 1) | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | fact n = case n of | ||
| + |     0 -> 1 | ||
| + |     _ -> n * (fact $ n - 1) | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | fact n  | ||
| + |    | n == 0    = 1 | ||
| + |    | otherwise = n * (fact $ n - 1) | ||
| + | </pre> | ||
| + | |||
| + | ==O'Caml== | ||
| + | <pre># let rec fact n = | ||
| + |       match n with | ||
| + |           1 -> 1 | ||
| + |         | o -> o * fact (o - 1);;</pre> | ||
| + | |||
| + | <pre># let rec fact = | ||
| + |       function | ||
| + |           1 -> 1 | ||
| + |         | o -> o * fact (o - 1);;</pre> | ||
| + | |||
| + | <pre># let fact n = | ||
| + |       let rec fact' n acc = | ||
| + |           match n with | ||
| + |               1 -> acc | ||
| + |             | o -> fact (o - 1) (n * acc) | ||
| + |       in | ||
| + |           fact' n 1;;</pre> | ||
| + | |||
| + | ==SML/NJ== | ||
| + | |||
| + | =Templates/Generics= | ||
| + | ==C++/D== | ||
| + | ==Java/Scala== | ||
| + | ==O'Caml/Haskell== | ||
| + | =Regular expressions= | ||
| + | =Anonymous functions/closures= | ||
| + | =Dynamic Programming= | ||
Latest revision as of 14:35, 11 June 2007
Ten best programming techniques you're (probably) not using.
| Contents | 
Pattern matching
Common Lisp (destructuring-bind)
[1]> (defun foo (a-list)
        (destructuring-bind (a &rest b) a-list
           (list a b)))
FOO
[2]> (foo '(1 2 3 4))
(1 (2 3 4))
[3]>
Erlang
-module(example).
-export(hello/1]).
hello("wtd") ->
    io:format("Hello, ~s!~n", [Name]);
hello(Name) ->
    io:format("Get out!!~n", []).
Scala
def fact(n : int) : int = n match {
    case 0 => 1
    case _ => n * fact(n - 1)
}
Haskell
fact 0 = 1 fact n = n * (fact $ n - 1)
fact n = case n of
    0 -> 1
    _ -> n * (fact $ n - 1)
fact n | n == 0 = 1 | otherwise = n * (fact $ n - 1)
O'Caml
# let rec fact n =
      match n with
          1 -> 1
        | o -> o * fact (o - 1);;
# let rec fact =
      function
          1 -> 1
        | o -> o * fact (o - 1);;
# let fact n =
      let rec fact' n acc =
          match n with
              1 -> acc
            | o -> fact (o - 1) (n * acc)
      in
          fact' n 1;;

