Мне интересно, есть ли способ «сократить» объявление списка в прологе. Вместо [1,2,3]. Я хотел бы myList = [1,2,3]. так что я могу попытаться использовать myList (например, member (X, myList) вместо того, чтобы повторять фактический список по всем местам, в которых я нуждаюсь. Возможно ли это? Тот факт, что я ничего не нашел в google еще говорит мне, что это, вероятно, нет, но вы никогда не знаете СпасибоМне интересно о списках пролога
ответ
вы можете использовать обычный Пролог «факт» вместо такого заявления, как это:..
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 Добро пожаловать! Если ответ подходит для вашей ситуации, подумайте о том, чтобы принять его, нажав галочку рядом с ним. Это указывает другим посетителям, что вы больше не активно ищете улучшенное решение и получаете новый значок в Stack Overflow. – dasblinkenlight
в предложении, просто использовать Variable (т.е. символа, начиная в верхнем регистре) объединены в список буквальным
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. Любая дополнительная информация о списках Пролога?
- 2. О синтаксисе Пролога
- 3. Возвращайтесь одинаковые значения в двух списках Пролога
- 4. Интересно о проблемах производительности HashTable
- 5. Multimap - интересно о функции .erase()
- 6. О списках в C#
- 7. О списках в python
- 8. О списках в java
- 9. CSS: вопрос о списках
- 10. Два вопроса о списках
- 11. CodeName Один о списках
- 12. Вопрос о списках С ++
- 13. о рекурсиях в списках
- 14. Информация о списках исчезает
- 15. Просто интересно узнать о SQL-соединениях
- 16. Мне было интересно, можете ли вы рассказать мне о различии между imread и cvLoadImageM
- 17. Возвращает список из элементов, соответствующих в двух списках Пролога
- 18. Мне было интересно, какой язык программирования это?
- 19. Оценка HAProxy и интересно о SSL?
- 20. данные кегль - интересно о хорошей должности
- 21. путать о неполном списках на схеме
- 22. Общие сведения о двойных списках
- 23. Рассуждение о списках в Coq
- 24. Нужна информация о пропуском списках
- 25. Простая реализация пролога о многоагентной аргументации
- 26. Интеграция пролога с C#
- 27. Ошибка пролога
- 28. Классификация пролога
- 29. Так мне было интересно, почему это truns из ложной о моем JUnit тест
- 30. Вопрос о связанных списках/указателях в C++
Вы должны принять ответ dasblinkenlight, чтобы убрать этот вопрос из списка без ответа и дать ему свои реквизиты. ;) –