มาทำความรู้จัก และ Install F# กันก่อน

สวัสดีครับ

ผมจะใช้ภาษาแบบ นักเศรษฐศาสตร์ ถึง นักเศรษฐศาสตร์ ครับ จะพยายามไม่ใช้ภาษาเทคนิคด้านนี้มากนัก

F# คืออะไร

F# คือ ภาษาชนิดหนึ่ง มันถูกออกแบบมาเป็นภาษาเชิง Functional Programming แต่มันเองก็รับเอาข้อดีของ Objects-Oriented Programming มาด้วย นั่นหมายความว่ามันสามารถเขียนได้ทั้ง Functional และ Objects-Oriented ได้เลยทีเดียว

Functional คืออะไร

Functional มันจะเน้นไปที่หน้าที่การทำงาน(Algorithm) สิ่งที่เป็นเหตุ(Input) และผล(Output)เพื่อนำไปสู่ การวิเคราะห์ หรือตัดสินใจบางอย่าง มากกว่าสิ่งอื่น

โครงสร้างของ Function มีรูปแบบดังนี้ครับ

Function = Input + Algorithm + Output — (1)

ตัวอย่างเช่น เราต้องการหาค่าเฉลี่ยของยอดขายใน 1 ปี function คำนวณก็คือ

Average(s1, s2, … , s12) = (s1 + s2 + … + s12) / 12 — (1.1)

Input คือ มูลค่าขายในแต่ละเดือน s1, s2, … , s12 12 เดือน

Algorithm คือ (s1 + s2 + … + s12) / 12 เอายอดขาย s1 ถึง s12 มารวมกันแล้วเฉลี่ยนด้วย 12

Output ก็คือ ค่า Average นั่นเอง (แนวคิด Services จะเทียบคียงได้กับแนวคิด Functional)

Objects-Oriented คืออะไร

OO ก็คือแนวคิดในการวิเคราะห์ หรือจินตนาการทุกสิ่งทุกอย่างที่กำลังสนใจ แล้วนิยามสัญลักษ์เพื่อใช้แสดงถึงสิ่งนั้นว่า คืออะไร(class, state) ทำอะไร(behavior) และเกี่ยวข้องกับสิ่งอื่นอย่างไร(relationship)

โดยให้อยู่ในขอบเขตที่เรากำลังสนใจ และแทนตัวของสิ่งนั้นให้มากที่สุดครับ

โครงสร้างของ Objects-Oriented

Object = [ID] + [State] + [Behavior]— (2)

Behavior = [Input] + Algorithm+ [Output] —(2.1)

สัญลักษณ์ […] คือ optional จะมีหรือไม่มีก็ได้

Func, OO และ Econ มันสัมพันธ์กันอย่างไร

สำหรับนักเศรษฐศาสตร์แล้ว ทฤษฏี และเรื่องราวทางเศรษฐกิจ หรือธุรกิจที่เราเรียนมาตลอดหลายๆปีในระดับปริญญาเศรษฐศาสตร์ นั่นละครับแนวคิดแบบ Objects-Oriented โดยแท้ ส่วนเรื่องของ Functional เราก็ได้เรียนมาอย่างมากในตอนต้องวิเคราะห์ข้อมูลทางเศรษฐกิจไงครับ สรุปเราได้เรียนมาทั้ง OO(Objects-Oriented) และ Func(tion) เรียบร้อยแล้วครับ เพียงแต่แยกกันอธิบาย

เช่น พอเราเรียนเกี่ยวกับทฤษฏี เราก็จะเรียนแต่พฤติกรรมต่างๆของ Actors และความสัมพันธ์ของมันที่ส่งผลเชื่อมโยงเป็นเหตุเป็นผลต่อกันในระบบเศรษฐกิจ แต่พอเรามาเรื่องของการวิเคราะห์ที่ต้องใช้ตัวเลข เราก็กลับไปใช้การวิเคราะห์เชิง functional แล้วเอาตัวเลขที่ได้นั้น กลับไปอธิบายเรื่องราวทางเศรษฐกิจอีกที นั่นก็คือกลับไปวิเคราะห์แบบ OO อยู่ในขอบเขตทางเศรษฐศาสตร์อีกทีไงครับ

ยกตัวอย่าง model เศรษฐศาสตร์มหภาคก็แล้วกันครับ คือ

C = Y + I + X – M –(3)

C คือ การบริโภค –(3.1)

Y คือ การผลผลิต –(3.2)

I คือ การลงทุน –(3.3)

X คือ การสินค้าส่งออกไปขายต่างประเทศ –(3.4)

M คือ การสินค้านำเข้าจากต่างประเทศ –(3.5)

ถ้าเราต้องการข้อมูลเพื่อจะวิเคราะห์ เราก็กำลังใช้แนวคิดแบบ Func ตัวแปลทุกตัวจะเป็นข้อมูลเชิงปริมาณ คือ C ในไตรมาสนี้มีค่าเท่าไรนะ แล้วมันมากกว่า Y + I + X – M เท่าไร จะทำให้เกิดเงินเฟ้อขึ้น แล้วเราจะต้องปลับ หรือกระตุ้น Y หรือ I หรือ X หรือ M กันดี เป็นต้น

แต่เมื่อไรก็ตามที่เราศึกษาในรายละเอียดของแต่ละตัว C, Y, I ,X, M ทุกตัวนี้จะแสดงเป็น Actors ที่ส่งผลกระทบต่อตัวแปรต่างๆ เช่น

C หรือ Consume(3.1) เป็นมูลค่าการบริโภค มันเป็น State ของ Actors ที่เป็น ผู้บริโภค นั่นคือ ประชากร Population(Pop) นั่นเอง

เราเขียน Func ข้างบนแบบ OO ได้เป็น

Pop.C = Pop.Y + Pop.I + Pop.X – Pop.M

เมื่อพิจารณาต่อ Pop ก็มีรายละเอียดลึกลงไปอีก เช่น ผู้บริโภคในครัวเรือน, ผู้ผลิต, ผู้ส่งออก, ผู้นำเข้าสินค้า

จะเห็นว่าเราจะต้องรู้ละเอียดของทุกตัวแปล รู้ถึงพฤติกรรม รู้ถึงสถานะ รู้ถึงเหตุปัจจัยของแต่ละ Actors ซึ่งเศรษฐศาสตร์เราก็แยกเรียนกัน ตัวแปล หรือ Actors ละเล่มกันเลยทีเดียวครับ

จุดสังเกตุ โครงสร้างของ Function(1) เป็นรูปแบบเฉพาะรูปหนึ่งของ Behavior(2.1) ที่เป็นองค์ประกอบใน Objects(2) และ

Input, Output ก็คือ State ของ Objects นั่นเอง

อธิบายเท่านี้ครับ ที่เหลือคงต้องให้ผู้อ่านไปพิจารณากันไปทีละนิด

เริ่มต้นเขียน F#

ก่อนจะเขียน F# load เครื่องมือต่างๆ ตามนี้มาลงที่เครื่องกันก่อนครับ

1. .NET Framwork 4.0 -> http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992&displaylang=en

(แนะนำให้ติดตั้ง Virtual Studio 2010 เลยดีกว่าครับ)

2. FunPad เครื่องมือสำหรับ Run F# -> http://funpad.codeplex.com/

พอลงทั้ง .NET และ App FunPad เสร็จแล้ว ก็เปิด FunPad ขึ้นมาครับ ซึ่งมันจะมีหน้าตา แบบข้างล่างนี้

เขียนคำสั่งนี้ลงไปที่ FunPad ครับ

printfn “Hello F# World!”;;

คำสั่ง ;; คือจบ code ครับ พอกด Enter เพื่อ execute คำสั่ง ผลลัพย์ ที่ได้คือ

Hello F# World!
val it : unit = ()

สำเร็จแล้ว… ยินดีด้วยนะครับ คุณเขียน F# เป็นแล้ว

มาเขียนอีกสักคำสั่งก่อนจะจบตรงนี้ Func หาค่าเฉลี่ยครับ จะเขียน F# ให้ทำงานอย่างที่เราต้องการได้อย่างไร

ดูนิยามสมการ (1.1) ครับ เขียนเป็นรหัส F# ได้ดังนี้

let Average (s:List<float>) = List.sum s/float s.Length;;

ทดสอบครับ

Average [1.0;2.0;3.0;4.0;5.0;6.0;7.0;8.0;9.0;10.0;11.0;12.0;];;

กด Enter แล้วจะได้ค่านี้ครับ

val it : float = 6.5

ติดตาม บทความ ต่อๆไปผมจะค่อยๆแทรกคำอธิบายคำสั่งรหัส F# ไปพร้อมๆกับการประยุกต์ F# ในงานทางด้าน Econometrics ครับ

Advertisements

#f