I'm quite familiar with imperative modes of programming so I've been bending my mind in the functional direction by reading Purely Functional Data Structures. The book's examples are written in ML (with a Haskell appendix), so I'm re-writing them in F#. I'll post them here as I do in the hopes that it will help other .NET programmers bend their mind as well.
Here is the code for a Stack implementation from Chapter 2.1:
#light
exception Empty
exception Subscript
type 'a Stack = Nil | Cons of 'a * 'a Stack
let empty = Nil
let isEmpty = function
| Nil -> true
| _ -> false
let head = function
| Nil -> raise Empty
| Cons(x, s) -> x
let tail = function
| Nil -> raise Empty
| Cons(x, s) -> s
let rec (-||-) xs ys =
if isEmpty xs then
ys
else
Cons(head xs, tail xs -||- ys)
let rec update = function
| Nil, i, y -> raise Subscript
| xs, 0, y -> Cons(y, tail(xs))
| xs, i, y -> Cons(head(xs), update(tail(xs), i-1, y))
No comments:
Post a Comment