N Best Programming Techniques

From Compsci.ca Wiki

(Difference between revisions)
Jump to: navigation, search
m
 
(17 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 14: Line 15:
#** 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;;

SML/NJ

Templates/Generics

C++/D

Java/Scala

O'Caml/Haskell

Regular expressions

Anonymous functions/closures

Dynamic Programming

Personal tools