วันพฤหัสบดีที่ 11 ตุลาคม พ.ศ. 2561

นิพจน์ (Expression)


นิพจน์ (Expression)
      นิพจน์จะเป็นกลุ่มของชุดคำสั่ง ซึ่งเป็นการนำเอา ฟังก์ชั่น อาร์กิวเมนต์ หรือเครื่องหมายดำเนินการต่าง ๆ เข้ามาประมวลผลเข้าด้วยกันให้ได้ผลลัพธ์ใหม่ เช่น

           ( +  A  10 ) = นิพจน์
             |   |__|___อาร์กิวเมนต์
             |_______ฟังก์ชั่น
          ดังนั้นในโปรแกรม AtuoLISP แต่ละโปรแกรมจะประกอบด้วยนิพจน์ จำนวนหลาย ๆ นิพจน์ที่ประกอบกันขึ้นมา และการสร้างนิพจน์ขึ้นมาจะต้องเป็นไปตามกฎเกณฑ์การสร้างนิพจน์ ดังนี้
1. ทุก ๆ นิพจน์ ไม่ว่าจะมี อาร์กิวเมนต์ หรือไม่ก็ตาม จะต้องขึ้นต้นด้วยเครื่องหมายวงเล็บเปิด ( ก่อน และปิดท้ายด้วยเครื่องหมายวงเล็บปิด ) เมื่อจบนิพจน์เสมอ
2. จำนวนเครื่องหมายวงเล็บเปิด จะต้องเท่ากับวงเล็บปิดเสมอ ไม่ว่าจะซ้อนกันกี่นิพจน์ก็ตาม
3. ในกรณีที่มีนิพจน์ซ้อนกันมากกว่า 1 นิพจน์ AutoLISP จะทำการประมวลผลวงเล็บในสุดก่อน แล้วจึงประมวลผลวงเล็บนอกที่ถัดออกมาเรื่อย ๆ จนจบนินพจน์กลุ่มนั้น
4. จะต้องเว้นช่องว่าง 1 อักษร ระหว่าง ฟังก์ชั่นและอาร์กิวเมนต์เสมอ
5. นิพจน์ที่มีการประมวลผลหรือรับข้อมูลจากภายนอก เช่น คีย์บอร์ด, เมาส์ หรืออุปกรณ์ช่วยอื่น ๆ อาจจะมีค่าหรือไม่มีค่าก็ได้ ถ้าไม่มีค่าถือว่าเป็น nil หรือถ้ามีค่าถือว่าเป็น T (True)





Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

เครื่องหมายดำเนินการ (Operator)


เครื่องหมายดำเนินการ (Operator)
ใน AutoLISP มีเครื่องหมายดำเนินการเช่นเดียวกับ ภาษาคอมพิวเตอร์อื่น ๆ ที่ช่วยในการสร้างเงื่อนไขสำหรับตัดสินใจ ซึ่งแบ่งออกเป็น 2 ประเภทดังต่อไปนี้
      เครื่องหมายเปรียบเทียบ (Relational Operator)
      เมื่อทำการเปรียบเทียบแล้วก็จะแสดงว่า เป็นจริง T (True) หรือเป็นเท็จ nil (False) อย่างใดอย่างหนึ่ง ซึ่งพอจะสรุปรวบรวมเครื่องหมายเปรียบเทียบได้เป็นตารางดังนี้
ตาราง เครื่องหมายดำเนินการและความหมาย
เครื่องหมายดำเนินการ
ความหมาย
> 
มากกว่า
< 
น้อยกว่า
>=
มากกว่าหรือเท่ากับ
<=
น้อยกว่าหรือเท่ากับ
=
เท่ากับ
/=
ไม่เท่ากับ
eq
เท่ากันอย่างแท้จริง
equal
เท่ากับ (ใช้กับตัวแปรแบบ List)
lisP
ตัวแปรเป็นแบบ List หรือไม่
minUSP
จำนวนมีค่าเป็นลบหรือไม่
numberP
ตัวแปรเป็นแบบ Real หรือ Integer หรือไม่
zeroP
ตัวแปรเป็นศูนย์หรือไม่

      เครื่องหมายทางตรรกศาสตร์ (Logical Operator)
      AND จะให้ได้ค่า T (True) ก็ต่อเมื่อทุก ๆ สถานะมีค่าเป็น  T (True)  หมดดังตาราง
ตาราง การทำงานของ AND
A
B
(and A B)
T
T
T
T
nil
nil
nil
T
nil
nil
nil
nil
     

OR จะใช้เปรียบเทียบสถานะ ถ้ามีสถานะใดสถานะหนึ่งเป็น T (True) ก็จะมีค่ารวมเป็น T (True) ดังตาราง
ตาราง การทำงานของ OR
A
B
(and A B)
T
T
T
T
nil
T
nil
T
T
nil
nil
nil
     
      NOT จะใช้ในการปรับเปลี่ยนสถานะ ให้ตรงกันข้ามกับสถานะเดิม
ตาราง การทำงานของ NOT
A
(not A)
nil
T
T
nil



Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

ฟังก์ชั่นและอาร์กิวเมนต์ (Function and Argument)


ฟังก์ชั่นและอาร์กิวเมนต์ (Function and Argument)
      ฟังก์ชั่น (Function)
      เป็นเสมือนตัวดำเนินการค่าคงที่หรือตัวแปร ที่ทำให้เกิดผลลัพธ์ขึ้นมาใหม่ ตามวิธีดำเนินการในลักษณะต่าง ๆ เช่น +, -, *, / ฯลฯ
      อาร์กิวเมนต์ (Argument)
     คือค่าคงที่ หรือตัวแปรที่เราส่งผ่านเข้าไปดำเนินการตามฟังก์ชั่นต่างๆ เช่น
     ( /  10  X )
       |   |__|___อาร์กิวเมนต์
       |_______ฟังก์ชั่น
      ในบางฟังก์ชั่นจำเป็นต้องมีอาร์กิวเมนต์ บางฟังก์ชั่นอาจไม่จำเป็นต้องมีก็ได้ ในภาษา AutoLISP นี้มีการแบ่งฟังก์ชั่นออกเป็น 2 ประเภทคือ
     1. ฟังก์ชั่นมาตรฐานที่มีใน AutoLISP
      ฟังก์ชั่นทางคณิตศาสตร์
      ฟังก์ชั่นเปลี่ยนแปลงชนิดข้อมูล
      ฟังก์ชั่นที่ใช้กับข้อมูลแบบ List
      ฟังก์ชั่นที่ใช้กับข้อมูลแบบ String
      ฟังก์ชั่นเกี่ยวกับเงื่อนไขและการวนรอบ
      ฟังก์ชั่นที่ควบคุมการ Input & Output
      ฟังก์ชั่นเกี่ยวกับไฟล์
      ฟังก์ชั่นเกี่ยวกับ Entity และการเลือก Entity
     2. ฟังก์ชั่นที่ผู้ใช้กำหนดขึ้นเอง (User Defined Function)
      เรียกใช้งานได้เช่นเดียวกับ Command
      เรียกใช้งานโดยฟังก์ชั่น




Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP



วันพุธที่ 10 ตุลาคม พ.ศ. 2561

ค่าคงที่และตัวแปร (Constant and Variable)


ค่าคงที่และตัวแปร (Constant and Variable)
ค่าคงที่ (Constant)
      หมายถึง ค่าที่มีค่าคงที่ตลอดเวลา โดยไม่มีการเปลี่ยนแปลง และจะคงที่เสมอตราบที่ยังดำเนินการประมวลผลอยู่ เช่น 9, 5, 2.7 ฯลฯ
ตัวแปร (Variable)
      หมายถึง สัญลักษณ์ (Symbol) ที่ผู้เขียนโปรแกรมสร้างขึ้นเอง เพื่อใช้สำหรับเก็บข้อมูลต่าง ๆ ในขณะที่ทำการประมวลผล และค่าของตัวแปรนี้จะมีการเปลี่ยนแปลงได้ตลอดเวลาขณะที่มีการประมวลผล ซึ่งมีการกำหนดสัญลักษณ์ที่จะต้องเป็นไปตามกฎเกณฑ์การตั้งตัวแปร นอกจากนี้ตัวแปรยังแบ่งออกเป็นชนิดต่าง ๆ ดังต่อไปนี้
      Integer ตัวแปรชนิดนี้ จะเป็นตัวเลขที่เก็บค่าจำนวนเต็มเท่านั้น ทั้งค่าบวก ลบ และค่าศูนย์ เช่น 1, -2, 0, 4, ฯลฯ โดยมีข้อจำกัดในการเก็บค่าตัวแปรอยู่ในช่วง -32768 ถึง + 32767 เท่านั้น
      Real ตัวแปรชนิดนี้ จะเป็นตัวเลขที่เก็บค่าจำนวนจริง ที่สามารถเก็บค่าทศนิยมได้ด้วย ทำให้ไม่จำกัดขนาดในการเก็บ เช่น 0.48, 1.8E – 2, 7.4E11 ฯลฯ แต่การกำหนดค่าตัวเลขแบบ Real ให้กับตัวแปรในกรณีที่มีค่าน้อยกว่า 1 จะต้องใส่เลขศูนย์นำหน้าเสมอ เช่น 0.87, 0.25 ฯลฯ
      List จะเป็นตัวแปรที่เก็บค่าตัวแปรชุด หรือเป็นกลุ่ม, เซ็ต โดยที่ตัวแปร 1 ตัว อาจมีข้อมูลอยู่หลายตัว และข้อมูลของตัวแปร List นี้ จะต้องอยู่ภายใต้เครื่องหมายวงเล็บเปิดและปิดเสมอ
      ตัวแปรชนิดนี้จะเหมาะสมกับการเก็บตัวแปรที่มีความสัมพันธ์ในลักษณะเป็นกลุ่ม หรือ เซ็ต เช่นการเก็บค่าโคออร์ดิเนต (X, Y, Z) โดยจะต้องใช้การเก็บค่าตัวแปรแบบ List ดังนี้
      (Setq Pt  ( list 1.1 -7.5 10.25 ) )   
      จะได้ค่า Pt = ( 1.1 -7.5 10.25 )
      String  จะเป็นตัวแปรที่ใช้เก็บอักขระหรือข้อความ ซึ่งการกำหนดจะต้องเขียนไว้ภายใต้เครื่องหมายคำพูด “ ” (Double Quotation Mark)  เช่น  (Setq Text “AutoLisp”)
      File Descriptor จะเป็นตัวแปรที่เก็บหมายเลขไฟล์ที่เรากำหนด เช่น <File : #31614> เพื่อที่ว่าจะสามารถอ้างอิงนำมาใช้งานได้เมื่อต้องการ โดยเฉพาะกรณีที่ AutoLISP ต้องการที่จะติดต่อกับไฟล์ เช่น อ่านหรือเขียนไฟล์นั้น จะใช้ File Descriptor นี้เป็นตัวกำหนด ซึ่งต่างกับภาษาอื่น ๆ ที่ใช้ชื่อ นามสกุลไฟล์เป็นตัวกำหนด เช่น เราต้องการเปิดไฟล์ชื่อ ABC.TXT เพื่อทำการอ่าน จะต้องกำหนดตัวแปร File Descriptor ก่อนดังนี้
      (Setq fis ( Open “ABC.TXT” “r” ) )
    เราก็จะได้ fis เป็นตัวแปรระบบ File Descriptor ซึ่งใช้ สำหรับอ้างอิงถึงไฟล์ ABC.TXT ในการอ่านต่อไป
      Entity Name จะเป็นตัวแปรในการเก็บชื่อของ Object หรือ Entity ซึ่งใน AutoCAD จะทำการเก็บข้อมูลทุกชนิดในรูปแบบ Database แบบ List และเรายังสามารถดึงนำมาใช้งานได้ เช่น
      ((-1 <Entity name : 60000016>) : กำหนดชื่อในรูปแบบรหัส
      (0 . “Line”)                  : เป็นเส้นตรง
      (8 . “0”)                      : อยู่เลเยอร์ 0
      (10 1.0 1.0 1.0)               : Start point = (1.0, 1.0, 1.0)
(11 2.0 2.0 2.0)               : End point = (2.0, 2.0, 2.0)
      (39 . 2.0)                     : มีความหนาเท่ากับ 2
      ..................
      )
      Selection Set จะเป็นตัวแปรที่ใช้เก็บกลุ่มของ Object ที่เลือกไว้ เช่น <Selection set : 1> ใน AutoLISP เราสามารถกำหนดให้ Object หลาย ๆ  Object เข้าไปอยู่ในตัวแปรแบบ Selection set ซึ่งเราจะสามารถอ้างอิงถึง และสามารถนำมาใช้ได้โดยการเรียกผ่านฟังก์ชั่นของ AutoLISP
      (Setq ss ( ssget “L”) )
      จะได้ค่า SS ของ Object ที่กระทำล่าสุดไว้ (“L” = Last) สามารถนำมาใช้ได้ในภายหลัง



Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

องค์ประกอบของโปรแกรม AutoLISP


องค์ประกอบของโปรแกรม AutoLISP
      ในการเขียนโปรแกรม AutoLISP ขึ้นมาใช้งานนั้น จำเป็นต้องมี่ส่วนประกอบที่สำคัญดังนี้
1. ค่าคงที่และตัวแปร (Constant and Variable)
2. ฟังก์ชั่นและอาร์กิวเมนต์ (Function and Argument)
3. เครื่องหมายดำเนินการ (Operator)
4. นิพจน์ (Expression)
ตัวอย่างเช่น

            (Setq X (+ A 5 ) )
                     |  |  |__ ค่าคงที่
                     |  |___  ตัวแปร        รวมเป็น 1 นิพจน์
                     |_____ ฟังก์ชั่น



            ซึ่งจะหมายถึง X = A + 5














Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

โครงสร้างของ AutoLISP


โครงสร้างของ AutoLISP
          AutoLISP เป็นภาษาโครงสร้างภาษาหนึ่งที่มีลักษณะการเขียนโปรแกรมคล้ายกับภาษา C หรือ Pascal แต่จะกระทำได้ง่ายกว่าตรงที่ว่าไม่ต้องมีการประกาศหรือกำหนดชนิดของตัวแปรขณะที่ขึ้นต้นโปรแกรมซึ่งจะทำให้เขียนได้ง่าย เหมือนภาษา BASIC ดังนั้นผู้เขียนโปรแกรม AutoLISP จึงไม่จำเป็นต้องทำความเข้าใจกับโครงสร้างและชนิดของตัวแปรมากนัก ก็สามารถที่จะเขียนโปรแกรม AutoLISP ได้
ลักษณะการใช้งาน AutoLISP แบ่งเป็น 2 ลักษณะคือ
1. Direct Mode เป็นการติดต่อกับ AutoLISP โดยตรง ขณะที่อยู่ Command Prompt คล้ายภาษา BASIC ที่เขียนโดยไม่ได้กำหนดหมายเลขบรรทัด
2. Programmed Mode เป็นการเขียนโปรแกรม AutoLISP ให้อยู่ในรูปแบบ Text File ก่อนแล้วเรียกเข้ามาในหน่วยความจำ จากนั้นจึงสั่งรันอีกครั้งหนึ่ง ซึ่งจะเห็นได้ว่าลักษณะการใช้งาน AutoLISP แบบ Direct Mode จะใช้ได้เพียงครั้งเดียว แต่แบบ Programmed Mode สามารถเรียกมาใช้ภายหลังได้ นอกจากนั้นยังสามารถที่จะปรับปรุงแก้ไขโปรแกรมบางส่วนได้อีกด้วย การเก็บโปรแกรมอยู่ในรูปของ Text File นามสกุลจะต้องเป็น .LSP เท่านั้น
จากลักษณะการใช้งาน AutoLISP ทั้ง 2 แบบนั้นเราจะศึกษาเน้นหนักในรูปแบบของ Programmed Mode ซึ่งจะมีประสิทธิภาพการใช้งานดีกว่ามาก เราจะอาศัยหลักการเป็นภาษาโครงสร้างนี้ มาใช้ให้เป็นประโยชน์ โดยเราจะทำการแบ่งโปรแกรมออกเป็นส่วน ๆ ที่แยกการทำงานเป็นแบบโมดูล (Module) ซึ่งจะง่ายต่อการเขียนโปรแกรมและตรวจหาที่ผิด (Debug)  นอกจากนี้ยังสามารถนำโมดูลนี้ไปใช้กับโปรแกรมตัวอื่น ๆ ได้ ซึ่งถือว่าเป็นการเขียนโปรแกรมแบบที่มีประสิทธิภาพที่สุด
ดังนั้น เราควรมีการวางแผนการเขียนโปรแกรมไว้ล่วงหน้าก่อนที่จะเขียนโปรแกรมเสมอ โดยการวิเคราะห์และเขียนโฟลว์ชาร์ตขึ้นมา จากนั้นจึงพยายามทำการรวบรวมคำสั่งที่ต้องถูกเรียกใช้งานบ่อย ๆ หรือกลุ่มคำสั่งที่ซับซ้อนมาก ๆ เข้าด้วยกัน และควรเขียนโปรแกรมขึ้นในลักษณะแบบบล็อก (Block) ที่เป็นฟังก์ชั่นที่สามารถถูกเรียกใช้งานได้ แล้วค่อยเขียนโปรแกรมเมนหลักให้ทำการดึงฟังก์ชั่นนั้นมาใช้งานอีกทีภายหลัง










Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

AutoLisp


AutoLisp

AutoLISP เป็นภาษาคอมพิวเตอร์ที่ถูกสร้างขึ้นมาโดยอาศัยพื้นฐานมาจากภาษา LISP (LIST Processing) ที่สามารถเขียนขึ้นในลักษณะที่เป็นโครงสร้าง (Structure) ซึ่งจะเอื้ออำนวยให้ผู้ใช้งานสามารถเขียนแยกส่วนหรือแบ่งกันทำงานได้ แต่อย่างไรก็ตาม AutoLISP ที่กล่าวถึงนี้มิได้อยู่แยกเป็นภาษาหนึ่งจาก AutoCAD เหมือนกับภาษาคอมพิวเตอร์อื่น ๆ เช่น C, Pascal, BASIC ฯลฯ คือ ผู้ใช้งานสามารถใช้งาน AutoLISP ได้ภายใต้ AutoCAD เท่านั้น จะรันโปรแกรมตามลำพังไม่ได้ โดยโปรแกรม AutoLISP จะถูกคอมไฟล์ในลักษณะอินเตอร์เพรเตอร์ (Interpreter) คือเมื่อป้อนข้อมูลลงไปก็จะให้คำตอบออกมาที่ละบรรทัดต่อบรรทัด ทันที  AutoLISP จะใช้งานร่วมกับ Macros ของ AutoCAD โดยที่การปฏิบัติหน้าที่ของ Macros จะทำได้เฉพาะคำสั่งมารตรฐานของ AutoCAD ที่มีอยู่แล้วเท่านั้น แต่ผู้ใช้งานสามารถใช้ AutoLISP เป็นเครื่องมือในการสร้าง Command ขึ้นมาใหม่ด้วยการนำคำสั่งต่าง ๆ ของ AutoCAD ที่มีอยู่แล้วมาประกอบกัน ใช้ฟังก์ชั่นพิเศษเข้ามาช่วยเสริม และใส่เงื่อนไขต่าง ๆ เข้าไปเพื่อให้สามารถตัดสินใจเองได้ จากนั้นก็จะนำทั้งหมดมาประมวลเข้าด้วยกัน สร้างเป็น Command ขึ้นมาใหม่ที่จะสามารถเรียกใช้งานได้เหมือนกับคำสั่งมาตรฐานทั่ว ๆ ไปของ AutoCAD

















Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP