2010-10-05 107 views
10

有沒有一種方法可以確定Prolog中列表中元素的類型?我知道變量沒有在Prolog中明確地輸入,但是我需要檢查一個元素是否是一個數字,一個特定的字符等等。這怎麼實現?Prolog類型檢查

+0

對於比基元更復雜的類型,可以查看SWI_PROLOG記錄處理機制(http://tinyurl.com/2gy53rr)。這將允許您使用指定的訪問器字段來表示複合類型,並且會根據記錄規範自動生成所有類型檢查謂詞。很有用! – sharky 2010-10-05 22:41:57

回答

11

的Prolog定義了類型測試目的內置謂詞的組:var/1atom/1integer/1float/1atomic/1compound/1nonvar/1number/1,所有的如果你知道這種語言的數據類型,那麼它們具有相當明顯的含義。對於特定的字符,在檢查元素不是自由變量(否則統一總是成功)之後,可以利用與該字符的統一。

4

你可以試試這個代碼:

isList([_|_]). 
isList([]). 

希望它能幫助。

+4

不回答問題。 – Junuxx 2012-06-26 03:46:12

+1

...和'isList([a | b])'成功,但不是列表。 – false 2012-06-26 10:32:34

+3

我知道它與這個問題無關,但他的意思是,我認爲是'isList([_ | Tail]: - isList(Tail).'而不是第一行 – Yolgie 2012-11-07 16:22:31

0

檢查列表,你可以嘗試:

listing(is_list/1, list_functor/1). 

is_list(X) :- 
    functor(X, F, _), 
    list_functor(F). 

list_functor('.'). 
list_functor('[]'). 
2

要檢查變量綁定到一個列表,你可以使用is_list/1