Возвращение списка выходит странным после удаления в Erlang, кто-нибудь может объяснить? - PullRequest
1 голос
/ 25 октября 2019

Итак, у меня есть странный случай, когда я удаляю элемент 5 из списка, но когда я возвращаю этот новый список, вывод выходит странным образом. До сих пор я проверял это, и есть много случаев, когда это происходит, не только в коде, который я имею ниже, а также случаи, когда это не происходит, но все еще очень похоже. Один пример, в котором он печатается нормально, - это когда я удаляю 10 или 12 вместо 5. Поэтому я знаю, что из списков: member () 10 существует в Newlist, и когда я выполняю io: format (), список приходитправильно. Но когда я на самом деле возвращаю Newlist в конце, я получаю "\ n \ f" как вывод, и я не понимаю, почему полностью. Я полагаю, что это как-то связано со списком, не являющимся стандартным синтаксисом, как указано в документации для io: format для того, что последовательность управления ~ w делает:

"Записывает данные со стандартным синтаксисом. Это используетсядля вывода терминов Эрланга. Атомы печатаются в кавычках, если они содержат встроенные непечатаемые символы. Символы атома> 255. экранируются, если не используется модификатор перевода Unicode (t). Плавания печатаются точно как самая короткая, правильно округленная строка. "

Любые идеи о том, почему это происходит, и решения, которые могут быть у кого-либо, чтобы при возврате списка это был просто список [10,12]?

unload_shiptest3(Container) ->
   Q = [5,10,12],
   Newlist = Q -- [Container],
   R = lists:member(10,Q),
   io:format("~w~n",[Newlist]),
   Newlist.

1 Ответ

2 голосов
/ 25 октября 2019

"/ n / f" и [10,12] - это те же списки, вы можете легко проверить это в оболочке:

9> "\n\f" = [10,12].
"\n\f"

не выдает ошибку.

В вашем коде, используя явный формат ~ w, вы получаете список без интерпретации: [10,12]. но если вы тестируете свою функцию в оболочке, она печатает ее, используя симпатичный формат печати. Результат содержит только символы ASCII, поэтому он печатает его в виде строки "\n\f".

. Когда вы тестируете его, удаляя элемент 10, результирующий список содержит 5, который не интерпретируется как печатный символ, и печатный результат. это то, что вы ожидали [5,12]

Я думаю, что есть способ попросить оболочку избежать использования красивой печати, я отредактирую, если получу ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...