相等謂詞

相等謂詞

在數學斷言、電腦程式以及系統規格說明中經常可以看到含有變數的語句,例如語句“x大於3”,謂詞就是“大於3”,謂詞表明語句的主語具有的一個性質。相等謂詞是指用於比較兩個主語或者兩個對象在哪方面具有相同或相等的性質。常見的相等謂詞有EQ、EQL和EQUAL。

簡介

在數學斷言、電腦程式以及系統規格說明中經常可以看到含有變數的語句,例如語句“x大於3”,謂詞就是“大於3”,謂詞表明語句的主語具有的一個性質。 相等謂詞是指用於比較兩個主語或者兩個對象在哪方面具有相同或相等的性質。相等謂詞在電腦程式中和人工智慧中有著廣泛的套用。

謂詞

定義

用來描述或判定客體性質、特徵或者客體之間關係的詞項。在數學斷言、電腦程式以及系統規格說明中經常可以看到含有變數的語句,謂詞表明語句的主語具有的一個性質。

例如:

"貓是動物"一句中的"是"就是一個謂詞,而"貓"是客體。

"3 大於 2"中"大於"是一個謂詞。

謂詞常項

表示某個確定判定的謂詞稱為謂詞常項。如上述兩個謂詞"是"、"大於"。

謂詞變數

在一階邏輯中,謂詞變數是表示(在項之間的)一個關係的謂詞字母,這個關係還沒有被特殊的指派任何特定的關係(或意義(內涵))。在一階邏輯(FOL)中它們可以被更合適的到叫做"元變數"。在高階邏輯中謂詞變數對應於"命題變數",它可以表示同一個邏輯中的合式公式,而這種變數可以被通過(至少)二階量詞的方式來量化。

在元變數意義上,謂詞變數可以用來定義公理模式。謂詞變數應當區別於謂詞常量,它可以被表示為要么通過不同的(排他的)謂詞字母集合,要么通過在其論域中實際上有自己特殊的意義的符號。

n 元謂詞

在一個命題中,若有 n 個客體名稱與謂詞相聯繫,則稱該謂詞為 n 元謂詞。

如上述"是動物"為一元謂詞,因為只有"貓"這一個客體與之相聯繫。

而命題「3 大於 2」中的謂詞「大於」與兩個客體聯結,是一個二元謂詞。

常用運算符

比較運算符

=、==:判斷兩個表達式是否相等,在謂詞中=和==是相同的意思都是判斷,而沒有賦值這一說

>=,=>:判斷左邊表達式的值是否大於或等於右邊表達式的值

<=,=<:判斷右邊表達式的值是否小於或等於右邊表達式的值

>:判斷左邊表達式的值是否大於右邊表達式的值

<:判斷左邊表達式的值是否小於右邊表達式的值

!=、<>:判斷兩個表達式是否不相等

BETWEEN:BETWEEN表達式必須滿足表達式BETWEEN {下限,上限}的格式,要求該表達式必須大於或等於下限,並小於或等於上限

邏輯運算符

AND、&&:邏輯與,要求兩個表達式的值都為YES時,結果才為YES。

OR、||:邏輯或,要求其中一個表達式為YES時,結果就是YES

NOT、 !:邏輯非,對原有的表達式取反

字元串比較運算符

BEGINSWITH:檢查某個字元串是否以指定的字元串開頭(如判斷字元串是否以a開頭:BEGINSWITH ‘a’)

ENDSWITH:檢查某個字元串是否以指定的字元串結尾

CONTAINS:檢查某個字元串是否包含指定的字元串

LIKE:檢查某個字元串是否匹配指定的字元串模板。

其之後跟?代表一個字元

其之後跟*代表任意多個字元

比如”name LIKE ‘cy‘”,這表示name的值中包含cy則返回YES;”name LIKE ‘?cy*’”,表示name的第2、3個字元為cy時返回YES。

MATCHES:檢查某個字元串是否匹配指定的正則表達式。

集合運算符

ANY、SOME:集合中任意一個元素滿足條件,就返回YES。

ALL:集合中所有元素都滿足條件,才返回YES。

NONE:集合中沒有任何元素滿足條件就返回YES。如:NONEstudent.age<18,表示student集合中所有元素的age>=18時,才返回YES。

IN:等價於SQL語句中的IN運算符,只有當左邊表達式或值出現在右邊的集合中才會返回YES。

相等謂詞函式

所謂謂詞函式就是其回送值取真或假的函式,在LISP中真用T表示,假用NIL表示,當函式的回送值為非NIL時,也表示為真。T和NIL是兩個特殊的原子,(NIL比較特殊,它既是一個表(空表),又是一個原子),它們的值分別為其自己。

用於比較兩個S-表達式是否相等的謂詞有三個,它們既有相同之處,又各有區別,請注意它們的不同用法。

EQ、EQL和EQUAL是三個判斷相等的謂詞函式,初學者不容易理解他們各自的功能和區別。首先,這三個謂詞函式都是當兩個S-表達式相等時為真,否則為假。其區別是判斷相等的"標準"不一樣。

在EQ中,相等的標準指的是在記憶體中的地址,即指向這兩個S-表達式的指針值。只有當兩個S-表達式在記憶體中的地址相同時,EQ才為真,否則即便兩個S-表達式在邏輯上相等,EQ也為假。

EQL比EQ前進了一步。如果兩個S-表達式EQ相等,則EQL也相等。所不同的是,如果兩個S-表達式是數字,並且他們的存儲結構是一致的,即同為整數,或者同為浮點數,則如果這兩個數字在邏輯上是相等的時,EQL就為真,而不管他們是否是地址相等。

EQUAL判斷的最為徹底,不管兩個S-表達式是什麼類型的,其存儲地址如何,只要他們邏輯上是相等的,就為真。

EQ用來比較兩個S-表達式是否相等,但其比較方法是通過判斷指向兩個S-表達式的指針是否相等來進行的,只有當指針相同時,EQ才為真。因此,當兩個S-表達式邏輯上相等時,不一定EQ相等。在LISP中,文字原子的存儲是唯一的,因此對於文字原子,其邏輯相等與EQ相等是等價的。

由於在LISP語言中,文字原子是唯一存儲的,即任何同名的文字原子,都存儲在同一個位置,所以任何兩個同名的文字原子,都是EQ相等的。

(EQ 'a 'a)==>T

(EQ 'a(CAR '(a b)))==>T

分別建立的兩個表,即便他們的內容是一樣的,但存儲的位置也是不同的,所以(EQ '(a b) '(a b))為假。

(EQ '(a b) '(a b))==>NIL

在LISP語言中,表是以鍊表的形式存儲的,將一個表賦值給一個文字原子,就是將該原子的值指向該表,所以通過賦值得到的兩個表,其地址是一樣的。因此在這裡(EQ x y)為真。

(SETQ x '(a b c))

(SETQ y x)

(EQ x y)==>T

相關詞條

熱門詞條

聯絡我們