我想知道是否有一種方法來「捷徑」序言中的列表聲明。而不是 [1,2,3]。我想myList = [1,2,3]。這樣我就可以嘗試使用myList(比如成員(X,myList)),而不必一遍又一遍地重複實際的列表,這是可能的嗎?我沒有在google上找到任何東西還告訴我,它可能不是,但你永遠不知道謝謝我想知道序言列表
我想知道序言列表
回答
可以代替上述聲明,使用常規的Prolog的「事實」,像這樣:。
myList([1, 2, 3]).
現在你可以使用這個事實如此:
someRule :-
myList(L), /* Unify L with the list from myList fact */
member(X, L), /* Use L, which is now the [1, 2, 3] list */
...
這種方法可以避免硬編碼列表t帽子需要在你的程序中的幾個地方使用。
子句中非常感謝你,這正是我正在尋找的! –
@JoshAlcorn不客氣!如果答案適用於您的情況,請考慮單擊旁邊的複選標記以接受該答案。這會向其他訪問者表明您不再主動尋找改進的解決方案,併爲堆棧溢出獲得新徽章。 – dasblinkenlight
,只使用一個可變(即一個符號開始大寫)統一列出字面
some_rule(Z) :-
X = [1,2,3], Y = [4,5,6],
append(X, Y, Z),
forall(member(M, X), writeln(M)).
否則,共享多個子句中的列表,dasblinkelight」暗示去。
如果有人需要一個例子,這裏是我用來測試這個代碼,它的工作原理。
:- dynamic my_spell_is/1.
my_spell_is(none).
spellslist([fire,ice,lightning,heal]).
casting :-
my_spell_is(X),
write('Current spell: '), write(X), nl.
isspell(X) :- (validSpell(X) ->
my_spell_is(Y),
retract(my_spell_is(Y)),
assert(my_spell_is(X)) ;
write(X), write(' is not a valid spell.'), nl).
validSpell(X) :-
spellslist(L), /* Unify L with the list from spellslist fact */
member(X, L). /* Use L, which is now the [fire,ice,lightning,heal] list */
感謝您編輯我的代碼。我對這個網站並不是特別熟悉,或者它的工作原理,我對張貼草率的代碼表示歉意。 –
沒問題!要格式化代碼,請選擇要格式化的行,然後單擊編輯器頂部的'[{}]'按鈕。您也可以在代碼塊前添加四個空格以使其格式化,或者在問題內部使用反向引號代替內聯代碼。 – dasblinkenlight
- 1. 我想知道MKMapView?
- 2. 想知道Java對象 - json序列化
- 3. 我想知道SQL命令
- 4. C++我想知道對象
- 5. 我想知道在Java中
- 6. 我想知道在休眠
- 7. AppleLanguages也給我了語言環境,如果我只想知道語言
- 8. 我想知道,編譯器將如何獲得字符序列
- 9. 我想知道列表中的每個項目的計數
- 10. 我想知道什麼是Facebook的算法語言
- 11. 我想知道如何編寫Raptor編程語言程序的僞代碼?
- 12. 我想知道我的形式提交
- 13. 好奇,想知道
- 14. 想知道使用
- 15. 想知道的XPath
- 16. 如果我想製作webapps,我真的需要知道多種語言嗎?
- 17. 列表框麻煩。我不知道
- 18. WCF - 想知道請求隊列
- 19. 我想知道所有關於編碼
- 20. 我想知道的.htaccess規則
- 21. 我想知道釋放變量
- 22. 我想知道cv錯誤的含義
- 23. 我想知道代碼的輸出
- 24. 獲取有關我想知道屬性
- 25. 如何彌補我想知道作品
- 26. 我想知道如何在乳膠
- 27. 我想知道收費的百分比
- 28. 我想知道Maven是什麼
- 29. 我想知道App Engine清楚
- 30. 我想知道文件創建日期
你應該接受dasblinkenlight的回答,從未回答的清單中清除這個問題,並給他他的道具。 ;) –