warning: Creating default object from empty value in /home/www/virtual/kiterminal.com/htdocs/blog/modules/taxonomy/taxonomy.pages.inc on line 33.

Haskell

การเขียนและใช้งาน Stacks และ Queues ใน Haskell

Stacks

newtype Stack a = Stk [a] deriving Show
 
push x (Stk xs) = Stk (x:xs)
 
pop (Stk []) = error "pop from an empty stack"
pop (Stk (_:xs)) = Stk xs
 
top (Stk []) = error "top from an empty stack"
top (Stk (x:_)) = x
 
emptyStack = Stk []
 
stackEmpty (Stk []) = True
stackEmpty (Stk _ ) = False

ตัวอย่างการเรียกใช้งาน

$ hugs Stacks.hs
Main> push 5 (push 3 (push 1 emptyStack))
Stk [5,3,1]
Main> top (push 5 (push 3 (push 1 emptyStack)))
5
Main> pop (push 5 (push 3 (push 1 emptyStack)))
Stk [3,1]

Haskell list functions ใน Prelude.hs

: เพิ่มสมาชิก 1 ตัวข้างหน้าลิสต์

Hugs> 1 : [2, 3]
[1,2,3]

++ รวมลิสต์ 2 ลิสต์เข้าด้วยกัน

Hugs> "Kit" ++ "erminal"
"Kiterminal"

!! คืนค่าตำแหน่งที่ต้องการของลิสต์ โดยเริ่มจากตำแหน่งที่ 0

Hugs> [1, 3..10] !! 1
3

concat การเชื่อมลิสต์ของลิสต์ให้เป็นลิสต์เดียวกัน

Hugs> concat [[1, 2], [], [3]]
[1,2,3]

length บอกความยาวของลิสต์
 

Haskell

เขียน Haskell ครั้งแรก มันก็ไม่ได้ยากมากเท่าไหร่ เพียงอาจจะต้องเปลี่ยนแนวคิดนิดหน่อย

Fibonacci

fib 0 = 1
fib 1 = 1
fib n = fib(n-1)+fib(n-2)

Factorial

fac 0 = 1
fac n = n * fac (n-1)

Summation

s [] = 0
s (x:xs) = x + s (xs)

Length

len [] = 0
len (x:xs) = 1 + len (xs)

Quick Sort

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)