Я действительно не понимаю, почему Пролог печатает один пробел только после предиката member/2. Ниже текст из моей консоли.
?- member(1, [1, 2, 3]).
true .
?- string("why").
true.
Это действительно сводит меня с ума!
Я действительно не понимаю, почему Пролог печатает один пробел только после предиката member/2. Ниже текст из моей консоли.
?- member(1, [1, 2, 3]).
true .
?- string("why").
true.
Это действительно сводит меня с ума!
Эта функция предназначена для того, чтобы показать, что вы фактически прервали запрос на верхнем уровне. Давайте рассмотрим более явный случай, когда вы изначально получаете:
?- member(1,[1,1]).
true
Здесь Пролог подтверждает, что это правда, но все еще ждет вашего ответа. Если вы попросите больше с помощью ПРОБЕЛ или ;, вы получите следующее решение:
?- member(1,[1,1]).
true ;
true.
Однако, если вы нажмете Return или ., Prolog прервет ваш запрос. Чтобы показать это на экране, вставляется дополнительный пробел:
?- member(1,[1,1]).
true .
Традиционно многие реализации никогда не запрашивали альтернативы при наземных запросах, если сам запрос не содержал никакой переменной. Эта «оптимизация» часто скрывала неожиданные петли.
В вашем примере Пролог не знал, возможен ли дальнейший ответ, поэтому он подсказывает на данный момент. Если вы затем попросите больше, вы получите:
?- member(1, [1, 2, 3]).
true ;
false.
что говорит о том, что дальнейшего решения нет.
true
является результатом и подсказкой, ожидающей, что вы наберете что-то, чтобы сказать Прологу, что делать дальше. Я предполагаю, что точка, которую вы показываете, связана с тем, что вы нажали.
, но вы могли нажать;
или какую-либо другую допустимую команду, которую она ожидает. Во втором случае это просто результат без запроса ввода. Это довольно ясно. Не нужно паниковать. Просто дышать... - person lurker   schedule 30.11.2017