Я решил использовать функцию карты в своем Clojure TTT, чтобы позволить игроку выбирать размеры доски, на которой он хочет играть. Раньше у меня был цикл for, который вычислял выигрышные позиции для доски 3x3, для этого нужно было знать, какие индексы отслеживать, и поэтому он работал только для доски 3x3.

Я мог бы использовать другой метод или полиморфизм, чтобы определить, какой размер был задан, а затем отслеживать элементы, необходимые в цикле for, в зависимости от этого.

Гораздо эффективнее вычислять выигрышные индексы, когда пользователь передает размер, который он выбрал, с помощью простой формулы.

Я использовал карту и метод каждый?, чтобы проверить, содержат ли индексы метки какую-либо комбинацию выигрышных индексов. Для метода every? в Clojure требуется предикат и коллекция, на которую он может воздействовать. Я случайно передал ленивую последовательность в команду every? метод поэтому имеет ошибки литья. Важно убедиться, что у вас есть правильные структуры данных в Clojure, и поскольку я пытался передать ленивую последовательность, мой метод win не знал, как действовать.

Тип скобок, которые вы используете в Clojure, очень важен. Вот так весь язык умеет действовать. Круглые скобки обозначают вызовы функций или вызовы макросов, а квадратные скобки — данные.

Удивительно, как много ошибок возникает из-за скобок, и я знаю, что когда у меня возникает ошибка, это либо потому, что они не в том месте, либо они неправильного типа!