LISP เบื้องต้น 1

LISP เบื้องต้น 1 ถ้าต้องการหาค่าของ expression 2 * (3+4) ใน CLISP จะพิมพ์ที่ prompt ของ CLISP ตามนี้ (* 2 (+ 3 4)) จะได้ผลเป็น 14 รูปแบบ function ทางคณิตศาสตร์ f(x) หรือ f(x,y) เมื่อเขียนใน CLISP จะมีรูปแบบเป็น (f x) หรือ (f x y) Continue reading →

ชาวนา กับ หมาป่า มี แพะ และกะหล่ำปีด้วย ตอน 3 ตอนจบ

        มาต่อตอนที่ 3 ตอนจบ         วันนี้มาขึ้นเรือกัน แน่นอนที่ว่าต้องมีชาวนาไปด้วย รวมกันแล้วบนเรือมีได้ 2 อย่าง มาเริ่มกันที่ชาวนาไปคนเดียวก่อน และต้องอยู่ในสถานะที่ปลอดภัยด้วย (ถ้าลืมไปอ่าน 2 ตอนก่อนหน้านี้)         สถานะที่ปลอดภัยเมื่อชาวนาไปอยู่อีกฝั่งหนึ่ง ที่ตรงข้ามกับฝั่งเดิม นั่นคือ ต้องหาว่าฝั่งตรงข้ามของชาวนาคืออะไร (other-side) และของแต่ละอย่างอยู่ฝั่งไหน เมื่อชาวนาข้ามไปแล้วปลอดภัยไหม เขียนใน LISP ได้เป็น   (defun farmer-with-him (side)    (safe (create-side (other-side (where-farmer side))                 (where-wolf side)                 (where-goat side)                 (where-cabbage side))))   มี function เพิ่มขึ้นคือ   (defun create-side (f w g c) (list f w g c))   (defun other-side (side)    (cond ((equal side 'w) 'e)              ((equal side 'e) 'w))) ต่อมาเขียนได้ไหมว่า ให้ชาวนาพาของแต่ละอย่างข้ามฝั่ง เขียนอย่างไร มาดูเฉลย         1.เริ่มต้นต้องตรวจสอบก่อนว่าของที่จะพาไปนั้นอยู่ฝั่งเดียวกับชาวนาไหม Continue reading →

ชาวนา กับ หมาป่า มี แพะ และกะหล่ำปีด้วย ตอน 2

มาต่อตอนที่ 2  ดูเงื่อนไขอื่นอีก         สถานะที่ไม่ปลอดภัย แพะ (goat, g) และกะหล่ำ (cabbage, c) อยู่ฝั่งเดียวกัน where-goat side และ where-cabb side มีค่าเท่ากัน เขียนด้วย LISP จะได้เป็น                 (equal (where-goat side) (where-cabb side)) ถ้า (where-goat side) และ (where-cabb side) มีค่าเท่ากันจะได้ผลเป็นจริง   เมื่อตรวจสอบโดยใช้ cond จะได้         cond(                         (equal (where-goat side) (where-wolf side))                 nil )         (t side) เหมือนรูปแบบแรก ถ้ามีชาวนาอยู่ด้วยก็ปลอดภัย         (not                 (equal (farmer-side state) (wolf-side state) )         ) จะเห็นว่าตรวจสอบสถานะที่ไม่ปลอดภัยง่ายกว่า ถ้าสถานะที่ไม่ปลอดภัย เป็น เท็จ แสดงว่าปลอดภัย J เมื่อรวมกับครั้งที่แล้วจะได้    (cond (            (and                         (equal (where-goat side) (where-wolf Continue reading →

ชาวนา กับ หมาป่า มี แพะ และกะหล่ำปีด้วย

        วันนี้มาดูกันว่าเราจะพา ชาวนา (f, farmer) หมาป่า (w, wolf) แพะ (g, goat) และกะหล่ำปี (c, cabbage) ข้ามแม่น้ำจากฝั่งซ้าย (w, west) ไปฝั่งขวา (e, east) ได้อย่างไร มาทดลองเขียนโดยใช้ LISP         1.เริ่มต้น ด้วยการกำหนดตัวแปรของข้อมูลก่อน โดยใช้ ADT 1.1 list ของสัญลักษณ์ farmer, wolf, goat, cabbage ใช้เป็นตัวย่อ f, w, g, c เขียนในรูปแบบของ LISP จะได้ (f w g c) 1.2 list สัญลักษณ์ ฝั่งของแม่น้ำ west, w และ east, e ใช้ร่วมกับ list ของfarmer, wolf, goat, cabbage เพื่อแทน หรือแสดงว่า แต่ละอย่างอยู่ฝั่งไหนของแม่น้ำ เช่น (w w w w) เมื่อเทียบกับ (f w g c) แล้วมีความหมายว่า ทุกอย่างอยู่ฝั่งซ้าย (ตะวันตก, west, w) และมีสถานะปลอดภัย           2.สถานะปลอดภัย         Continue reading →