Fuzz Buzz
Fizz Buzz เป็นโจทย์ที่นิยมใช้สำหรับ ทดสอบการเขียนโปรแกรม กฎคือ ให้เขียนโปรแกรมที่รันเลขตั้งแต่ 1 - 100 โดย
- ถ้าเลขนั้นหาร 3 ลงตัวให้พิมพ์
Fizz
- ถ้าเลขนั้นหาร 5 ลงตัวให้พิมพ์
Buzz
- และถ้าเลขนั้นหารทั้ง 3 และ 5 ลงตัวให้พิมพ์
FizzBuzz
ใน F# สามารถแก้ปัญหานี้ได้หลายวิธี วิธีที่ง่ายสุดคือใช้ Pattern matching อีกวิธีคือใช้ Active pattern ซึ่งจะทำให้โค้ดอ่านง่ายขึ้น ส่วนวิธีสุดท้ายที่ยากสุดคือ ใช้ Computation expression
Pattern matching
Pattern matching แบบแรกคือ ใช้วิธีีคำนวณตัวเลขทีตำแหน่ง matching case โดยใช้ when guard
1 | let fizzBuzz number = |
หรือคำนวนในประโยค match ... with
1 | let fizzBuzz i = |
Partial active pattern.
ใช้ Partial active pattern สองตัว คือ P3
และ P5
1 | let (|P3|_|) i = if i % 3 = 0 then Some i else None |
หรือใช้ Partial case เดียว คือ DivisibleBy
ซึ่งเป็น Optimize version ของแบบแรก
1 | let (|DivisibleBy|_|) divisor i = |
Computation expression
วิธีที่ยากสุด คือ เขียนด้วย Computation expression
1 | type M<'T> = M of 'T |
Links