01204435/haskell1

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

หน้านี้เป็นส่วนหนึ่งของรายวิชา 01204435 ภาคต้น 2556

ทดลองทั่วไป

เรียก ghci แล้วทดลองคำสั่งทั่วไปดังนี้ (ทดลองพิมพ์ไปตามลำดับ)

1 + 2
1 / 5
5 * 10
5 ^ 2
div 20 4
div 20 3
25 `div` 7
mod 15 4
`mod` 7
True
True && (2 == 5)
True || (2 == 5)
(4 > 3) || (2 == 5)
:type 'a'
:type "a"
:type "hello"
:type 10
:type 20.5
:type True
:type (20 == 30)

ตัวแปรใน ghci

ใน ghci เราสามารถกำหนดตัวแปรเพื่อแทนค่าบางค่าได้ โดยใช้คำสั่ง let

let x = 10
x * 10
let y = 20
x * y
let x = 100 in let y = 20 in x * y

ฟังก์ชัน

เราไม่สามารถนิยามฟังก์ชันภายใน ghci ได้ เราต้องสร้างแฟ้มภายนอก (โดยมากนิยมใช้นามสกุล .hs) สร้างแฟ้ม htest1.hs โดยใส่นิยามของฟังก์ชันสองฟังก์ชันดังนี้

add x y = x + y

double x = add x x

ใน ghci เราสามารถโหลดนิยามของฟังก์ชันได้ โดยสั่ง

:load htest1

จะเห็นว่า prompt เปลี่ยนจาก Prelude เป็น Main (แทนชื่อโมดูลที่เราทำงานอยู่)

ถ้าเรามีการแก้ไขไฟล์ และต้องการโหลดใหม่ ให้สั่ง

:reload

เราสามารถทดลอง

add 10 20
10 `add` 40
let f = add 100
f 20
let g = double
g 50

เพิ่มนิยามของสองฟังก์ชันนี้เข้าไป และทดลอง ฟังก์ชันทั้งสองต่างกันอย่างไร

fun1 x = add x (x * 10)
fun2 x = add x x * 10

if, guard, และ pattern matching

tuples และ lists

ข้อมูลพื้นฐานใน Haskell คือ tuples และ lists

ลิสต์เขียนโดยใส่ข้อมูลในรายการในเครื่องหมาย [ ] เช่น

[1,2,3,4]
['a',b','c']

ทดลอง

:type [1,2,3,4]
:type [True,False,True]
:type ["hello","world","good-bye"]
:type "hello"

ด้านล่างเป็นตัวอย่างฟังก์ชันพื้นฐานบนลิสต์

head [1,2,3,4]
tail [1,2,3,4]
take 2 [1,2,3,4]
drop 3 [1,2,3,4]
length [1,2,3,4]
sum [1,2,3,4]
[1,2,3,4] ++ [5,6,7]

recursion