2012-09-20 35 views
1

我有一個謂詞可以分解一個表達式,而且我有一些結果,當我追蹤它時我不明白。Prolog分解返回一段時間

我的謂詞是如下

calc(R,Expr) :- Expr =..[Op,H,T]. 

因此,當我有一個像表達[1,1],運算實際上是一個週期。任何想法爲什麼?

+0

A [相關問題](http://stackoverflow.com/questions/10022779/prolog-unusual-cons-syntax-for-lists/)。 – false

回答

4

這是因爲形式[Head|Tail]只是語法糖'.'(Head, Tail)(一切都是一個術語,列表也不例外)。通常情況下,由1234列表中,你必須寫

'.'(1, '.'(2, '.'(3, '.'(4, [])))). 

正如你所看到的,這是不是很實用,而是我們使用快捷鍵:

[1|[2|[3|[4|[]]]]] 

而這個快捷方式有一個捷徑:

[1, 2, 3, 4] 

,並根據需要可以混合使用那些:

[1, 2|[3, 4]] 

時,要指定一些內容,然後讓自由的尾巴是很方便的:

[1, 2|A] 

順便說一句,你可以看到自己使用write_canonical/1

?- write_canonical([1, 2, 3, 4]). 
'.'(1,'.'(2,'.'(3,'.'(4,[])))) 
true. 

希望它有助於您可能感興趣的

+0

謝謝!這很清楚 – edelweiss