2
我正在編寫一個模塊,它使用term_expansion/2
來處理序言源文件。在這樣做的時候,我使用=..
或使用functor/3
將其項目名稱解析爲謂詞。 例如:在序言中更改謂詞/函子的名稱
?- functor(pred(foo, bar), N, _).
N = pred.
?- pred(foo, bar) =.. L.
L = [pred, foo, bar].
現在我想的pred
名稱更改爲(例如)pred_expanded
並恢復正常的術語,使pred(foo, bar)
變得pred_expanded(foo, bar)
。
我試過append(pred, "_expanded", F)
和append(pred, '_expanded', F)
沒有成功。
使用ISO謂詞**'atom_concat/3' **連接原子。 – mat
@mat你爲什麼不寫一個答案?如果在「擴展」名稱的相同模塊中碰巧存在一個謂詞,會發生什麼? (我知道這是使用term_expansion/2生成代碼的更普遍的問題)。是否這樣擴展發生在一個單獨的過程中,即擴展的代碼不會自動進一步擴展,即使有爲其定義的擴展? – 2016-09-07 09:30:11
@Boris:我想吸引更多的海報來解決這個問題,我認爲這是一個很好的入門點,如元編程,術語擴展等許多重要的主題。如果我只是回答「使用atom_concat/3」,這會得到立即被接受,那麼整個問題很快就會被遺忘,其他重要的和相關的事情,如你所提到的,將不可能在這個機會下討論。不過,我也想幫助用戶解決他們更直接的問題,所以我認爲一個簡短的評論是最好的,以滿足這兩個要求。 – mat