1
我有一個謂詞可以分解一個表達式,而且我有一些結果,當我追蹤它時我不明白。Prolog分解返回一段時間
我的謂詞是如下
calc(R,Expr) :- Expr =..[Op,H,T].
因此,當我有一個像表達[1,1],運算實際上是一個週期。任何想法爲什麼?
我有一個謂詞可以分解一個表達式,而且我有一些結果,當我追蹤它時我不明白。Prolog分解返回一段時間
我的謂詞是如下
calc(R,Expr) :- Expr =..[Op,H,T].
因此,當我有一個像表達[1,1],運算實際上是一個週期。任何想法爲什麼?
這是因爲形式[Head|Tail]
只是語法糖'.'(Head, Tail)
(一切都是一個術語,列表也不例外)。通常情況下,由1
,2
,3
和4
列表中,你必須寫
'.'(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.
希望它有助於您可能感興趣的
謝謝!這很清楚 – edelweiss
A [相關問題](http://stackoverflow.com/questions/10022779/prolog-unusual-cons-syntax-for-lists/)。 – false