How to start Artificial Intelligence – variable

บทนำ (Overview)

ภาษา Lisp สามารถสร้างตัวแปร (Variable) ได้เช่นเดียวกับภาษาอื่น ๆ โดยมีฟังก์ชันสำคัญ “setq” และ “set” โดยตัวแปรก็เหมือนกับที่ๆ เก็บข้อมูลในหน่วยความจำ และสามารถเรียกใช้เมื่อไหร่ก็ได้จนกว่าค่าจะเปลี่ยนหรือโดนลบไปดังต่อไปนี้


ขั้นตอน (Steps)

  1. ฟังก์ชัน setq ใช้สำหรับกำหนดตัวแปร มีโครงสร้างดังนี้ (setq ชื่อตัวแปร ค่าตัวแปร)
      i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
      I I I I I I I      8     8   8           8     8     o  8    8
      I  \ `+' /  I      8         8           8     8        8    8
       \  `-+-'  /       8         8           8      ooooo   8oooo
        `-__|__-'        8         8           8           8  8
            |            8     o   8           8     o     8  8
      ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8
    
    Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>
    
    Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
    Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
    Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
    Copyright (c) Bruno Haible, Sam Steingold 1999-2000
    Copyright (c) Sam Steingold, Bruno Haible 2001-2010
    
    Type :h and hit Enter for context help.
    
    [1]> (setq x 1)
    1
    [2]> x
    1
    
  2. จาก “code” ข้างต้นจะเห็นว่า มีการกำหนดชื่อตัวแปร “x” และให้ค่าเท่ากับ “1” จากนั้นเมื่อลองเรียกใช้ตัวแปร “x” พบว่าจะมีการแสดงค่า “1” ตามที่ได้จดจำไว้ในหน่วยความจำ ซึ่งในโครงสร้างของภาษา “lisp” สามารถซ้อน “List” ได้ดังนี้
    [3]> (setq x (* 5 6))
    30
    
  3. ในอาร์กิวเมนที่สองเป็นค่าที่จะต้องให้กับค่าตัวแปรในอาร์กิวเมนต์ที่หนึ่ง บางครั้งเราสามารถใส่ค่าอักขระเข้าไปได้โดยไม่จำเป็นต้องเป็นค่าของตัวแปร แต่จะต้องอยู่ภายใต้ฟังก์ชัน (quote …) หรือใช้ ‘… เพราะถ้าไม่อย่างนั้นโปรแกรมพยายามประมวลผลเพื่อหาค่า และถ้าไม่เคยกำหนดค่าจะเกิด “error” ดังนี้
    Break 5 [4]> (setq x apple)
    
    *** - SETQ: variable APPLE has no value
    The following restarts are available:
    USE-VALUE      :R1      Input a value to be used instead of APPLE.
    STORE-VALUE    :R2      Input a new value for APPLE.
    ABORT          :R3      Abort debug loop
    ABORT          :R4      Abort debug loop
    ABORT          :R5      Abort debug loop
    ABORT          :R6      Abort debug loop
    ABORT          :R7      Abort debug loop
    ABORT          :R8      Abort main loop
    
  4. ลองทดสอบอีกครั้ง
    [5]> (setq x 'apple)
    APPLE
    
  5. ต่อมาฟังก์ชัน set คล้ายกับ setq  มันคล้ายกันมากแต่ภาษา lisp ดันมีวิธีกำหนดค่าตัวแปรแบบพิศดารคือ สามารถกำหนดตัวแปรให้กับตัวแปรได้ เออ…เคยได้ยินว่ากำหนดค่าให้กับตัวแปร ลองพิจารณาตัวอย่างดังต่อไปนี้
    [1]> (setq x 'apple)
    APPLE
    [2]> x
    APPLE
    [3]> (set apple 1)
    
    *** - SYSTEM::READ-EVAL-PRINT: variable APPLE has no value
    The following restarts are available:
    USE-VALUE      :R1      Input a value to be used instead of APPLE.
    STORE-VALUE    :R2      Input a new value for APPLE.
    ABORT          :R3      Abort main loop
    Break 1 [4]> apple
    
    *** - SYSTEM::READ-EVAL-PRINT: variable APPLE has no value
    The following restarts are available:
    USE-VALUE      :R1      Input a value to be used instead of APPLE.
    STORE-VALUE    :R2      Input a new value for APPLE.
    ABORT          :R3      Abort debug loop
    ABORT          :R4      Abort main loop
    Break 2 [5]> (set x 1)
    1
    Break 2 [5]> apple
    1
    Break 2 [5]> x
    APPLE
    
  6. จากผลการทดลองข้างต้นพบว่า
    • ‘apple ถูกใส่ค่าเข้าไปในตัวแปร x
    • จากนั้นลองทดสอบดึงค่าจากตัวแปร x ก็พบว่าเป็น apple
    • ต่อจากนั้นลองใส่ค่า 1 ไปยัง apple แต่ใช้ set พบว่าตัวแปร apple ยังไม่เคยถูกกำหนด จึงแสดง error ออกมา
    • ที่นี้ลองใส่ 1 เข้าไปในตัวแปร x อีกครั้ง แต่ใช้ set
    • ลองทดสอบเรียกค่าตัวแปร x แต่กลับพบว่ายังคงเป็น ‘apple แทนที่จะเป็น 1
    • ลองเรียกตัวแปร apple พบว่าถูก assign ค่าเป็น 1 เข้ามาอัตโนมัติ เช่นกัน

ใส่ความเห็น