EP.8 บทนี้ ถือเป็นบทสุดท้ายที่จะยุ่งเกี่ยวกับ Code และเป็นปลายทางของการสร้าง isPrime(n)

ใน EP.7 เราได้สร้าง isPrime(n) ที่ทำงานได้อย่างถูกต้องเรียบร้อยแล้ว และสิ่งสุดท้ายในการเขียน isPrime(n) ก็คือ การแสดงผล เพื่อทำให้คนอื่นเข้าใจคำตอบง่ายขึ้น ซึ่งต้องอาศัย data type ชนิดสุดท้าย

String

หากเป็นคนที่เคยผ่านการเขียนโปรแกรมด้วยภาษา C คงจะเข้าใจเป็นอย่างดีว่า string ที่เรากำลังพูดถึงกันอยู่ตอนนี้ ความจริงแล้วไม่มีอะไรซับซ้อนเลย

ความจริงที่น่าตกใจ คือ

string = array of characters = array of specified numbers

ทั้งนี้เพราะว่า แม้กระทั่งใน computers ทั่วๆไป ก็ไม่มีข้อมูลตัวอักษร ทั้งหมดที่เราเก็บลงในคอมพิวเตอร์ต่างเป็นตัวเลข สิ่งที่เราเห็นเป็นแค่ ข้อตกลง ที่คอมทุกเครื่องใช้ร่วมกัน และเรียก “ข้อตกลง” นี้ว่า Encoding และข้อตกลงที่ว่านี้ คือ ข้อตกลงที่ว่าด้วยการแทนตัวอักษรด้วยตัวเลข ไม่ว่าจะเป็นตัวอักษรใดก็ตาม หากต้องการเก็บลงคอมพิวเตอร์ ทุกอย่างจะโดนแปลงเป็นตัวเลข ด้วยข้อตกลงที่กำหนด

ดังนั้น ไม่ว่าจะอยู่ที่ไหนก็ตาม แค่เพียงแค่ใช้ตัวเลขเดียวกัน ในข้อตกลงเดียวกัน ทุกคนก็สามารถสื่อสารกันได้อย่างเข้าใจ และข้อตกลงที่เข้าใจง่าย และโด่งดังมากๆ ก็หนีไม่พ้น ASCII ที่สร้างขึ้นในปี 1960 แต่ยังคงมีใช้กันถึงปัจจุบัน (ถึงแม้ว่าจะค่อยๆโดนแทนที่ด้วย Unicode)

ซึ่งเจ้า ASCII บอกว่า

ดังนั้น /me สามารถสร้างคำว่า “PRIME” แทนด้วย List ของตัวเลขดังนี้

แต่อย่างไรก็ตาม /me ไม่จำเป็นจะต้องใช้ standard encoding เพราะว่า /me ต้องสร้าง decoder เพื่อแปลงตัวเลขไปเป็นตัวอักษรด้วยตัวเองอยู่แล้ว

เพื่อออกแบบมาตรฐานของตัวเอง /me จะกำหนดเพียงตัวอักษรทั้งหมดที่ต้องใช้ ซึ่งมีเพียง “0123456789NOT PRIME” ทั้งหมด 19 ตัวอักษรแทนด้วยตัวเลข 0 ถึง 18

ดังนั้น “NOT PRIME” = [11, 12, 13, …, 18] สามารถแทนด้วย

และ 2 ฟังก์ชั่นสุดท้าย ที่จำเป็นสำหรับการใช้ string คือ

* TO_DIGIT(N) ฟังก์ชั่ันสำหรับการแปลง number ไปเป็น string

และ

* to_string(N) สำหรับการแปลง functional string ไปเป็น native string

ประกอบทุกส่วนเข้าด้วยกัน

Victory !!

ในที่สุดเราก็มาถึง checkpoint จุดสุดท้าย จุดที่เราร่วมกันสร้าง isPrime(n) ตั้งแต่ต้นโดยไม่ใช้ data structure อื่นนอกจาก functions

และตามที่ได้สัญญาเอาไว้ว่า เราจะแปลงทั้งหมดเป็นฟังก์ชั่น เราจะไม่หลงเหลือความเป็นตัวแปรอีกต่อไป

#หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ #หนิมันภาษาอะไรเนี๊ยะ

ก็หวังว่า ถ้ามีคนอ่านมาจนถึงตอนนี้ ก็คงได้อะไรไปไม่บ้างก็น้อย และขอจบบล๊อคซีรีย์ Programming with Nothing อย่างไม่เป็นทางการเพียงแค่นี้ เพราะ จริงๆมีตอนต่อไป เป็นบทสรุปว่า ทำไมเราถึงสามารถใช้ functions สร้างได้ขนาดนี้ แนวคิดนี้เดิมทีแล้วเป็นของใคร?

ไว้เจอกันใหม่นะฮะ

I cannot teach anybody anything. I can only make them think

― Socrates

PS. อ่านตอนก่อนหน้าได้ที่
EP1: Introduction
EP2: Numbers
EP3: Arithmetic operators
EP4: Booleans
EP5: Predicates & Comparison Operators
EP6: Recursion
EP7: List
EP8: String
EP9: Epilogue * ยังไม่เขียน

ต้นฉบับ Programming with Nothing

แต่สามารถ ดูโค้ดส่วนต่างๆได้ที่ Github จะทยอย push ตามบล๊อคที่ทยอยเขียน

Tell your friend about thisShare on Facebook
Facebook
0Tweet about this on Twitter
Twitter