Куда бы я ни посмотрел, я вижу что-то вроде этого: append([1,2,3],[a,b,c],appended).,
но что, если у меня есть 2 списка: ok([1,2,3]). и hello([a,b,c])., и я хочу добавить ok и hello вместе.
Почему append(ok,hello,appended). не работает?
Как бы я сделал это таким образом, не вводя каждый элемент вручную, если списки уже определены?
хорошо, я хочу назвать результат как-то по-другому, и поэтому я хочу, чтобы он назывался добавленным, что нормально, и привет, добавленным вместе. Как мне это сделать без необходимости вводить каждый элемент?





Сначала вы запрашиваете списки, а затем добавляете их:
ok( OK), hello( Hello), append( OK, Hello, Appended).
Имена логических переменных Пролога должны начинаться с заглавных букв.
Если вы хотите, чтобы в результате вашего запроса сообщалось только Appended, попробуйте
ok( _OK), hello( _Hello), append( _OK, _Hello, Appended).
Другой, менее хакерский способ добиться этого, предложенный в комментариях Enigmativity, — определить для этого предикат специального назначения,
appended( Appended) :-
ok( OK), hello( Hello), append( OK, Hello, Appended).
мне проверить это, выполнив member(OK, Appended). где OK является элементом ok ? Потому что он возвращает false, когда я это делаю.
вы пишете именно так, как я показываю. попробуйте ok(OK). самостоятельно. это работает? вы утверждали, что он уже определен, поэтому он должен работать. Имеет ли это?
а как же hello(Hello).? тоже должно работать. тогда выражение, показанное в ответе, тоже должно быть. если нет, пожалуйста, покажите ваш запрос и ответ, который вы получите.
Это работает, но когда я выполняю запрос выше, он печатает OK, затем Hello, а затем Appended. Я хочу, чтобы он просто распечатывался с добавлением.
Попробуйте solve(Appended) :- ok(OK), hello(Hello), append(OK, Hello, Appended). А затем запросите ?- solve(Appended).. Это должно просто напечатать Appended.
Почему вы ожидаете, что
append(ok,hello,appended)сработает?append(X, Y, Z)просто добавляет спискиXиYв списокZ...