ตั้งค่าการอ่าน

ค่าเริ่มต้น

  • เลื่อนอัตโนมัติ
    CLIPS User's guide

    ลำดับตอนที่ #6 : หน่วยย่อยที่ 5 Sensitive Field and Slurping

    • อัปเดตล่าสุด 14 ธ.ค. 50



    ความละเอียดอ่อนของฟิลด์

    fact เช่น (duck) หรือ (quack) ประกอบไปด้วยฟิลด์ๆเดียว ฟิลด์เรียกว่าที่เก็บข้อมูล 1 ชนิด อาจจะเรียกอย่างอย่างหนึ่งว่า deftemplate ซึ่งจะได้กล่าวถึงในบทที่ 5

    ลำดับของชื่อฟิลด์ก็มีความสำคัญ เช่น ในกรณีที่ใส่กฎเกณฑ์ว่า “ล่า”

    (Brian duck) หมายถึง Brian ล่าเป็ด

    ต่างจาก

    (duck Brian) หมายถึงเป็ดล่า Brian

    โดยทั่วไปแล้ว วิศวกรรมซอฟต์แวร์ที่ดีจะกำหนดกฎเกณฑ์พร้อมๆกับความสัมพันธ์ระหว่างฟิลด์เสมอ เช่น

    (hunter-game duck Brian)

    ฟิลด์แรกหมายถึง hunter ฟิลด์ที่สองหมายถึง game

    list คือกลุ่มของสิ่งที่การเรียงลำดับมีความหมาย multifield หมายถึงหลายๆฟิลด์เรียงลำดับกัน ซึ่งแต่ละฟิลด์อาจมีค่าหรือไม่ก็ได้ ตัวอย่างเช่น (duck Brian) เรียกว่า multifield facts ถ้าบางฟิลด์ไม่มีค่าเรียกว่า nil เช่น

    (duck nil)

    แปลว่า duck ล่าอะไรไม่ได้สักกะอย่าง หมายถึงว่ามี 2 ฟิลด์นั่นเอง แต่ฟิลด์ที่สองไม่มีค่า

    มีฟิลด์หลายๆชนิด type เช่น float, integer, symbol, string, external-address, fact-address, instance-address ชนิดของฟิลด์เป็นตัวกำหนดชนิดของข้อมูลที่เก็บอยู่ในฟิลด์นั้น ในกรณีที่ไม่กำหนดชื่อฟิลด์ ชนิดของฟิลด์จะถูกกำหนดโดยชนิดข้อมูลที่เราใส่เข้าไป ใน deftemplate เราสามารถกำหนดชนิดของฟิลด์ได้

    symbol เป็นชนิดของฟิลด์ซึ่งเริ่มต้นด้วยตัวอักษรที่สามารถพิมพ์ออกมาได้และตามด้วยอักษรอื่นๆ ฟิลด์สามารถกำหนดได้ด้วย () หรือช่องว่าง ดังตัวอย่าง

    (duck-shot Brian Gary Rey)

    นี่เป็นการกำหนดฟิลด์ขึ้น 4 ฟิลด์ ในกรณีนี้นักล่าทั้ง 3 คนถูกฆ่าโดย duck (โหดชิบ) fact ไม่สามารถจะมี fact อื่นมาอยู่ภายใต้มันได้อีกแล้ว เช่น

    (duck (shot Brian Gary Rey))

    แต่ก็สามารถมีความหมายได้ ถ้าหากคำว่า “shot” เป็นชื่อฟิลด์และ Brian Gary Rey ก็เป็นชื่อฟิลด์ อักขระต่อไปนี้มีความหมายต่อ CLIPS

    “	(	)	&	|	<	~	;	?	$

    “&” “|” และ “~” ไม่สามารถใช้โดยอิสระได้ ต้องใช้ร่วมกับ symbol เสมอ อักขระบางตัวต้องใช้เฉพาะหัวท้ายของ symbol เท่านั้น เช่น

  • อักขระที่ไม่สามารถพิมพ์ได้ทั้งหลาย รวมทั้ง space return และ tab line-feed
  • ()
  • &
  • |
  • < ใช้เป็นอักษรตัวแรกของ symbol
  • ~
  • ; ใช้เป็น comment
  • ? และ $? ใช้เริ่มต้น symbol
  • ถ้าเราเผลอใส่ “” ใน top-level เช่น ใส่ภายใต้เครื่องหมาย () CLIPS ก็จะแสดงข้อผิดพลาดออกมา ทางที่ดีควรที่จะเลี่ยงการใช้เครื่องหมายแปลกๆข้างบนใน symbol ใดๆ เพื่อป้องกันความสับสน ต่อไปนี้เป็นตัวอย่างของ symbol ที่ดี

    duck
    duck1
    duck_soup
    duck-soup
    duck1-1_soup-soup
    d!?#%^

    symbol ชนิด string ซึ่งต้องมีเครื่องหมายคำพูดปิดหัวท้ายเสมอ เช่น

    “duck”
    “duck1”
    “duck/soup”
    “duck soup”
    “duck soup is very good!!!”

    ฟิลด์ต่อไปเรียกว่า numeric ฟิลด์สามารถเป็นได้ทั้งจำนวนเต็มและจำนวนทศนิยม ในกรณีที่เป็นจำนวนเต็มในภาษา list จะถือว่าเป็นจำนวนที่ยาวเสมอ ส่วนจำนวนที่เป็นจำนวนทศนิยมก็สามารถใช้คำสั่ง double-precision สำหรับจำนวนทศนิยมที่ยาวๆ จำนวนเต็มนั้นก็จะมีมากที่สุดไม่เกินจำนวนบิตของคอมพิวเตอร์ เช่นถ้ามี N บิตก็จะเก็บค่าจำนวนได้ไม่เกิน 2N สำหรับ 32 บิตก็จะเก็บจำนวนได้ ตั้งแต่ –2,147,483,648 ถึง 2,147,483,647 ถ้าเกินกว่านี้ให้ใช้ในรูปของเลขยกกำลังฐาน 10 ดังตัวอย่าง

    CLIPS> (facts)
    CLIPS> (clear)
    CLIPS> (assert (number 1))
    <Fact-0>
    CLIPS> (assert (x 1.5))
    <Fact-1>
    CLIPS> (assert (y -1))
    <Fact-2>
    CLIPS> (assert (z 65))
    <Fact-3>
    CLIPS> (assert (distance 3.5e5))
    <Fact-4>
    CLIPS> (assert (coordinates 1 2 3))
    <Fact-5>
    CLIPS> (assert (coordinates 1 3 2))
    <Fact-6>
    CLIPS> (facts)
    f-0	(number 1)
    f-1	(x 1.5)
    f-2	(y -1)
    f-3	(z 65)
    f-4	(distance 350000.0)
    f-5	(coordinates 1 2 3)
    f-6	(coordinates 1 3 2)
    For a total of 7 facts
    CLIPS>

    ข้อสังเกต แต่ละจำนวนจะมี symbol ที่ขึ้นด้วยตัวอักษร ใน CLIPS 6.0 จะมีคำบางคำที่เป็นคำเฉพาะไม่ให้ใช้เป็นฟิลด์แรก ซึ่งดูได้จากภาคผนวก

    fact ประกอบไปด้วยฟิลด์เดียวหรือหลายฟิลด์ fact สามารถเป็นได้ทั้งแบบเรียงลำดับและไม่เรียงลำดับ ตัวอย่างข้างบนเป็นแบบเรียงลำดับ ในภาษา CLIPS คำว่า duck-Brian เรียกว่ามีเพียง 1 ฟิลด์เพราะว่า “–” นั้นเป็นการเชื่อมต่อ 2 คำนั้นเป็นคำเดียว

    fact ที่มีหลายฟิลด์นั้นจะคั่นด้วยช่องว่างหรือ tab หรือ return หรือ | ก็ได้ดังตัวอย่าง

    CLIPS> (clear)
    CLIPS> (assert (The duck says “Quack.”))
    <Fact-0>
    CLIPS> (facts)
    f-0	(The duck says “Quack.”)
    For a total of 1 fact
    CLIPS> (clear)
    CLIPS> (assert (The	duck	says	“Quack.”	))
    <Fact-0>
    CLIPS> (facts)
    f-0	(The duck says “Quack.”)
    For a total of 1 fact
    CLIPS>

    Return ใช้สำหรับปรับข้อความให้อ่านง่าย ดังตัวอย่างข้างล่างก็ได้ผลเหมือนกัน

    CLIPS> (clear)
    CLIPS> (assert (The
    Duck
    Says
    “Quack”))
    <Fact-0>
    CLIPS> (facts)
    f-0	(The duck says “Quack”)
    For a total of 1 fact
    CLIPS>

    อย่างไรก็ตาม การใส่ Return ผิดที่ก็ให้ผลต่างออกไปได้

    CLIPS> (assert (The
    Duck
    Says
    “Quack
    ”))
    <Fact-1>
    CLIPS> (facts)
    f-0	(The duck says “Quack.”)
    f-1	(The duck says “Quack
    ”)
    For a total of 2 facts
    CLIPS>

    ในภาษา CLIPS นั้น ตัวอักษรตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่นั้นถือว่าแตกต่างกัน เช่น คำว่า (Duck) กับ (duck) ถือว่าเป็น fact ที่ต่างกัน ตัวอย่างต่อไปนี้เป็นตัวอย่างที่แสดงถึงการใช้เครื่องหมายลบหรือเครื่องหมาย Return “” โดยที่ “” แม้จะมีวรรคคั่นกลางก็ถือว่ามีฟิลด์เดียว เช่น “fudge sauce”

    CLIPS> (clear)
    CLIPS> (assert (grocery-list
    		ice-cream
    		cookies
    		candy
    		fudge-sauce))
    <Fact-0>
    CLIPS> (facts)
    f-0	(grocery-list ice-cream cookies candy fudge-sauce)
    For a total of 1 fact
    CLIPS>

    จะเห็นว่า CLIPS แทนที่ return และช่องว่างเพียง 1 ตัว ซึ่งทำให้อ่านง่ายขึ้น



    ติดตามเรื่องนี้
    เก็บเข้าคอลเล็กชัน

    ผู้อ่านนิยมอ่านต่อ ดูทั้งหมด

    loading
    กำลังโหลด...

    อีบุ๊ก ดูทั้งหมด

    loading
    กำลังโหลด...

    ความคิดเห็น

    ×