How to think in a Haskell way.

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

คือผมได้อ่านในบล็อกของคุณ pphetra นะครับในเรื่อง ที่หา Max sum ของ Sub Array โดยใช้ haskell แล้วก็ได้อ่านcommentจากคุณ bow_der_kleine ก็มีประเด็นเกี่ยวกับวิธีการแก้ปัญหาโดยใช้Haskell หรือภาษาแบบ functional programming นะครับ ว่า ถ้าเราจะใช้ภาษาแบบนี้ วิธีคิดแบบนี้ในการแก้ปัญหา หรือ เขียนโปรแกรมต่างๆ มันมีวิธีคิด
แบบไหนได้บ้าง มีขั้นตอนหรือวิธีการมองอย่างไรบ้าง

ส่วนตัวผมตอนเรียน haskell อาจารย์ท่านก็จะให้ฝึกโดยให้เขียนฟังก์ชันเลียนแบบการทำงานของฟังก์ชันที่อยู่ใน prelude อยู่แล้ว วิธีการก็คือหา pattern ที่เป็นแบบ recursive ของปัญหานั้นให้ได้นะครับ ซึ่งวิธีแบบนี้ผมว่าเป็นพื้นฐานของการคิดแบบ functional เลยนะครับ

ก็อยากจะลองถามคนอื่นๆที่ใช้ Haskell หรือภาษา แบบ Functional นะครับว่าแต่ละท่านมีวิธีการอย่างไรกันบ้าง

สงสัยจะมีเราเขียนกันอยู่แค่ 2 คน

วิธีการเขียนเลียนแบบ function ใน prelude ถือเป็นวิธีที่ดีมาก
เพราะมันไม่ยากจนเกินไป
แถมพอคิดได้แล้ว พอนำไปเปรียบเทียบกับที่คนเก่งเขาเขียนไว้
เราก็จะเกิดอาการสว่างวาบ อ๋อมันทำอย่างนี้นี่เอง

อย่างใน codenone เรามีทำโจทย์เรื่อง mandel brot กัน
ผมใช้ haskell เขียน, เขียนเสร็จก็รู้สึกว่ามันยังไม่ดี มันดีได้กว่านี้
ผ่านไป 3 เดือน ก็ไปค้นเจอ paper ที่พูดถึง การเขียน mandel brot ด้วย haskell
อ่านแล้วก็เกิดอาการสว่างวาบ

ปกติในการเรียนรู้การเขียนโปรแกรม
ผมมักจะใช้วิธีการอ่าน code ของคนอื่น
อย่าง java ผมก็ชอบดู code ของ eclipse, tapestry (ดูวิธีคิด ไม่ได้ดู syntax)
ถ้า ruby ก็ดู code ของ rails
แต่วิธีี้ยังนำมาใช้กับ Haskell ไม่ได้แฮะ
อ่าน code ของคนอื่นที่เขียน haskell ทีไร
เกิดอาการวนลูปไม่รู้จบขึ้นในหัว
ส่วนใหญ่จะ stack overflow แล้วก็ยอมแพ้เลิกอ่านไป

เคยทำโจทย์ haskell แล้วเกิดอาการหงุดหงิด
ด้วยวิธีที่ได้มา มันดูถึกเกินไป
ค้นใน google แล้วก็ไม่มีใครพูดถึง
สุดท้ายก็ไป post ถามใน mailing-list
อันนั้นก็ได้ผลดี มีคนมาช่วยตอบเยอะแยะ

sugree's picture

แปลกจัง ผมจบมาแบบไม่ได้เรียน

อ่อเปิดเป็นวิชาเลือกนะครับ อาจารย์ท่านทำวิจัยเกี่ยวกับ data mining และ AI ท่านก็เลยเปิดวิชาเลือก แล้วก็เอา
Haskell กับ Prolog มาสอนนะครับ

ส่วนใหญ่ผมก็จะนึกแบบ recursive ก่อนเลยน่ะครับ
มองว่ามีปัญหาขนาดหนึ่ง ลองตัดออกไปหน่วยหนึ่ง แล้วเอาไปแก้ ทีนี้จะเอาของที่ตัดออกไปมารวมจะทำอย่างไร

sugree's picture

induction?

มิน่าครัับ พยายามเรียน Haskell ทีไรยอมแพ้ทุกที เพราะงานที่ผมทำ บังคับให้คิดออกจาก recursive คือ อะไรที่เป็น recursive หากเป็นไปได้ต้องเอาออก แล้วทำเป็น feed forward แทน ซึ่งตรงข้ามกับวิธีคิดของ Haskell เลย

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น