Какие есть операторы для Яндекс Wordstat и как их использовать
Какой бы запрос мы не искали на wordstat.yandex.ru, надо уметь отсеивать лишнее и понимать какая настоящая частотность запроса, а не вся связанные с этим запросом ключи и словаформы.
Это полезно не только при сборе СЯ для SEO или контекстной рекламы, но и для оценки спроса на товар.
Пример запроса — «зеленый чай»
Может показаться, что это и есть спрос равный 266к запросам в месяц в одной поисковой сети, но на самом деле сам запрос «зеленый чай» искали 7к раз. Почему? — давайте разберемся!
Сбор СЯ (семантического ядра) очень долгий и кропотливый процесс и самое главное здесь две вещи:
- собрать максимально широкое СЯ с использованием синонимов, сленговых выражений, различных словоформ, подсказок, подсветок, парсера СЯ конкурентов и др.
- правильно определить частотность (это особенно важно в SEO, так как не редко ко мне обращаются клиенты, которые жалуются, что их «специалисты» продвинули сайт по ВЧ запросу, а продаж нет, но оказывается владельцу сайта показали НЧ запрос, по которому совсем нету трафика, а его было просто очень легко продвинуть. Клиент просто не умел правильно считать точную частотность
Содержание
- Зачем нужны операторы в Яндекс Вордстат
- Какие бывают операторы в Яндекс вордстат
- Оператор «плюс»
- Оператор «восклицательный знак»
- Оператор «кавычки»
- Оператор [квадратные скобки]
- Оператор «вертикальная черта и скобки»
- Оператор «минус»
Зачем нужны операторы в Яндекс Вордстат
Операторы — это специальные символы, которые используются для поиска нужной нам частотности в Вордстат. Без операторов Яндекс не учитывает словоформу, окончания, регистр, порядок слов и длину запроса.
Что касается длины запроса, то я имею в виду, что если вы хотите найти частотность того же запроса «зеленый чай», то вы получите общую частотность по всем запросам, где встречалось это словосочетание.
Например: запрос «зеленый чай» искали 266к раз, но сюда входит «как правильно заваривать зеленый чай» и сотни других запросов, а сам запрос «зеленый чай» искали всего 7к раз.
Более того, без операторов Яндекс будет объединять синонимы в один запрос и показывать общую частотность.
запросы синонимыТак же и союзы, местоимения и другие слова, которые не несут смысловой нагрузки, как бы выбрасываются из запроса и не учитываются в показатели частотности. Для Яндекс это стоп-слова.
Представляете, если вы ищете частотность по запросу «вода для кулера», то Яндекс не поймет, что запросы «вода для кулера» и «кулер для воды» отличается
Еще Яндекс склеивает повторяющиеся слова
Оператор «плюс»
Этот оператор помогает закрепить наши стоп-слова, то есть слова, которые игнорирует Яндекс и просто выкидывает из запроса.
Достаточно добавить перед этим словом знак «+».
Пример: тур +на бали
Если без этого оператора Яндексу плевать на слово «на» и он подсовывает запрос «бали туры цены»
то с оператором «+» результат будет другой
Теперь частотность этого запроса сократилась с 10 404 до 6 871, потому что выкинулись запросы без слова «на».
Заказать настройку рекламы
Оператор «восклицательный знак»
Оператор «!» фиксирует форму слова в нужном падеже, то есть будет показана частотность именно указанной формы слова.
Оператор «!» ставится перед нужным словом.
Пример: !тур +на бали
Да, я комбинирую различные операторы.
Уже 2 755 запросов
А «туры» искали больше
Не забывайте про «умных» людей, которые пишут не «на», а «в» Бали
Яндекс сочтет это синонимом на поиске, но для составления СЯ и определения частотности это может быть полезно.
Это действительно очень важный оператор. Представьте, что вы ищете частотность по запросу «купить билет в Москву«, а без этого оператора увидите еще и частотность «купить билет в Москве«, хотя это совершенно разные запросы.
Оператор «кавычки»
В кавычки берется запрос чтобы не показывать вложенные запросы, а узнать какая частотность только у указанных слов. При этом если не использовать другие операторы, то там так же будут меняться слова местами, окончания и т. д..
Важно! Если у вас в запросе повторяющиеся слова (например два раза предлог «на»), то Яндекс просто посчитает количество слов и может туда впихнуть лишнее слово.
Оператор [квадратные скобки]
Этот оператор учитывает все словоформы, стоп-слова и порядок слов.
Оператор «вертикальная черта и скобки»
Этот оператор нужен для группировки запросов. Я его использую когда надо быстро просуммировать частотность по множеству НЧ запросов.
Оператор «минус»
Оператор «-» ставят на те слова, которые не надо учитывать. В Директе минус-слова ставятся когда надо поставить запрет на показ рекламы по определенным запросам.
Можно так же комбинировать с другими операторами.
Перекрестная минусовка — используется уже при настройках рекламы. Если ключевые запросы пересекаются и один запрос содержит в себе другой, то тоже добавятся минус-слова. В этом случае ключевые фразы перестают конкурировать при выборе объявления для показа
При работе с операторами учтите также некоторые отличия Гугл от Яндекса:
Читайте подробнее про операторы Гугла.
Заказать настройку рекламы
примеры использования и отличия от Google.Ads
Мы уже рассказывали, как собирать и применять ключевые и минус-фразы в рекламных кампаниях. Но иногда у вас может возникнуть потребность ещё больше повысить точность показов по какой-то отдельной фразе. Для этого в Директе используются специальные символы, которые называются операторы.
Что такое операторы слов в Директе?
Это спецсимволы, которые помогают уточнить ваши ключевые и минус-фразы. Они дают возможность сделать показы более точными и получать на сайт только целевой трафик.
Вы можете возразить, что специально для этого мы добавляем в кампанию ключевики и делаем минусацию. Ведь эти манипуляции как раз и должны сделать так, чтобы рекламу видела только наша целевая аудитория. Но это работает не совсем так. Когда человек вводит в поиск свой запрос, Яндекс игнорирует:
- Порядок слов. Запросы билет москва бали и билет бали москва для него равнозначны
- Число.
- Падежи (матрас, матросом, матраса и т.д.)
- Предлоги, союзы и другие похожие части речи (в, на, под, как и так далее)
- Род и лицо. Например, удобный, удобная, удобное и закажу, закажешь, закажут
- Прилагательные и наречия. Он не отличит комфортный от комфортно
- Глаголы, причастия и деепричастия (сделать, сделанный, сделавший)
Из-за этого ваши объявления может увидеть не совсем ваша целевая аудитория, а люди, которые просто ищут что-то похожее. Например, человек хочет заказать питьевую воду и вводит запрос: вода на дом. А Яндекс показывает ему рекламу компаний, которые делают дома на воде. Уточняющие операторы фраз в Яндекс.Директ помогают избежать таких ситуаций.
Какие операторы для ключевых слов и фраз в Директе бывают?
- Восклицательный знак — !
Оператор восклицательный знак в Яндекс. Директ зафиксирует определённый вид слова: его число, падежную форму, род и время. Если этого не сделать, система не обратит на такие мелочи внимания.
Пример: если к словосочетанию купить !автомобиль подставить восклицательный знак, реклама не будет видна по запросам купить аккумулятор для автомобиля, купить автомобили с пробегом, купить прицеп для автомобиля и т.д.
- Плюс — +
Плюс фиксирует любые мелкие части речи, которые по отдельности не несут никакого смысла: местоимения, предлоги, союзы и частицы. Иначе система их не увидит.
Пример: реклама с ключевой фразой
- Кавычки — “ ”
Кавычки закрепляют точное количество слов. При этом никак не фиксируется их порядок.
Пример: объявление с ключевиком “купить матрас” не будет видно по запросам купить надувной матрас или заказать ортопедический матрас.
- Квадратные скобки — [ ]
Оператор квадратные скобки помогает установить порядок слов. Это может быть особенно важно, если вы рекламируете билеты или путешествия.
Пример: объявления с ключом билеты [казань новосибирск] могут быть видны по запросу билеты из казани в новосибирск или билеты на самолёт казань новосибирск. Но если ввести в поиск билеты новосибирск казань, они не покажутся.
- Скобки и вертикальная черта — ( ) и |
Эти знаки всегда используются вместе и помогают сгруппировать слова при сложных запросах. Скобки всё объединяют, а вертикальная черта используется в качестве “или”. Это удобно, когда нужно собрать вместе близкие по смыслу определения.
Пример: фраза (синяя | зелёная | розовая) подводка для глаз будет актуальна для каждого запроса: синяя подводка для глаз, зелёная подводка для глаз и розовая подводка для глаз.
- Решётки — # #
Этот символ используется для того, чтобы создавать однотипные объявления. Всё, что вы обозначите решётками, в объявлении заменится на любой ключевик, из тех, что вы добавите к кампании. Выбор будет зависеть от того, что ищет пользователь.
При использовании шаблона надо быть внимательным. Все ключевики должны сочетаться с текстом объявления так, чтобы при замене оставаться грамматически правильными, не нарушать требования модерации и вписываться в допустимое количество знаков.
Пример: вы рекламируете удобрения для растений. У вас есть ключевые фразы: удобрение для огурцов, калийные удобрения, удобрение для томатов, удобрения для растений, удобрение для клубники, азотные удобрения и так далее. Чтобы не составлять объявление под каждый похожий ключевик отдельно, можно использовать шаблон. Тогда рекламный текст будет выглядеть так: Купить #удобрение для огорода# по низкой цене в магазине “Садовод”. А вместо #удобрение для огорода# в объявление автоматически подставится любой из ключевиков.
Важно:
все специальные символы ставятся перед ключевым словом (отдельным или внутри фразы) вплотную без всяких пробелов. Исключение из этого правила — только вертикальная черта. Она с двух сторон отделяется пробелами.Использование операторов при работе с Вордстатом
Специальные символы можно использовать не только для рекламы, но и чтобы собирать семантику в Вордстате. Очень показательную ситуацию можно увидеть, если ввести в поле сервиса фразу из рук в руки. Из-за того, что Яндекс игнорирует предлоги, а два повторяющихся слова воспринимает как одно, он нашёл сразу всё, что подходит под ключевик рука.
На скриншоте видно, что тут нет ни одного релевантного нам запроса. Но если мы забьём нашу фразу в виде: +из !рук +в !руки, то ситуация сразу станет другой. Операторы зафиксируют всё, что нужно, и мы сможем увидеть подходящую статистику.
Операторы для минус-слов и фраз в Яндекс.Директ
Символы можно применять не только для ключевиков, но ещё и для минусации. Вообще она нужна, чтобы исключить показы по каким-то отдельным словам и фразам. Например, вы занимаетесь починкой стиральных машин и не хотите, чтобы люди видели ваши объявления по запросам самостоятельно, инструкция, своими руками, вакансии и т.д. Тогда вы можете сделать минусацию этих слов для своей рекламной кампании.
Самый главный оператор для минусации это, собственно, знак минуса. Когда вы добавляете минус-фразы в кампанию, Директ сам проставит нужные символы рядом с каждой. Но если вы хотите исключить какое-то одно слово из фразы для поиска по Вордстату, минус надо добавить вручную.
Также оператор минус в Яндекс.Директ можно использовать при добавлении ключевых фраз для группы объявлений во вкладке “Прогноз и уточнение”. В этом случае мы минусуем отдельные слова, чтобы сделать конкретную ключевую фразу более точной.
Справа от ключевика сразу видно прогноз показов, который будет меняться в зависимости от того, сколько слов вы заминусуете.
Другие символы в минус-фразах используются точно так же, как и в ключевиках. Например, вы продвигаете банк и не хотите, чтобы объявления показывались по запросам со словом банки (те, что стеклянные). Тогда можно смело минусовать словоформы -!банки и -!банок.
Ещё пример: если вы не хотите, чтобы ваша реклама была видна по информационным запросам, можно добавить такие минус-слова: -как, -почему, -зачем, -это и т.д. Но если вы не поставите перед каждым из них плюс, система их просто не увидит.
Можно ли применять сразу несколько операторов?
Специальные символы необязательно использовать по одному. Их легко можно сочетать между собой. Это даёт возможность ещё сильнее уточнить нужную фразу.
Например, у вас есть ключевик: купить билет в самаре. Чтобы не показываться по запросам купить билет в самару или купить билет тольятти самара, нужно зафиксировать предлог и словоформу. Это будет выглядеть так: купить билет +в !самаре.
Разница между операторами в Яндекс.Директ и Google Ads
В Google не используется понятие “операторы”. То, что называется так в Директе, там — типы соответствия. Всего их доступно три:
- Для широкого типа соответствия никакие специальные символы не нужны. Это аналог того, когда в Директе вы добавляете ключевики без каких-то специальных символов
- Для фразового ключевик нужно написать в кавычках. Тогда объявления покажутся по поисковым запросам, которые содержат именно такую формулировку без изменения порядка или разбивки слов. При этом дополнительные слова добавляться могут
- Чтобы обозначить точное соответствие, нужны квадратные скобки. В этом случае запрос должен быть точно такой же, как и ваш ключевик. Либо это может быть его максимально близкий вариант (синоним, слово с опечаткой, множественное число вместо единственного и т. д.)
Вот несколько главных отличий системы спецсимволов в Google.Ads:
- Используется меньше знаков. Только кавычки, квадратные скобки и минус. Из-за этого настройки менее гибкие
- Выше мы говорили, что любые символы в Директе можно сочетать между собой. В Ads такой возможности нет. Исключение — оператор минусации. Его можно комбинировать с остальными
- Операторы не могут использоваться для конкретного слова из фразы. Только ко всему словосочетанию целиком
- Тип соответствия можно менять не только с помощью подстановки специальных символов, но и просто выбрав его из выпадающего списка
Несколько заключительных советов
- Со специальными символами нужно работать осторожно. Если вы до конца не поняли, зачем вам тот или иной знак, лучше просто не используйте его. Иначе кампанию можно сделать намного менее эффективной
- Если вы решили переносить ключевые фразы из Директа в Google. Ads (или наоборот), будьте внимательны. Одинаковые символы в двух системах работают по-разному
- Операторы рекламных кампаний в Яндекс.Директ подходят только для поиска. В РСЯ ситуация другая. Там специальные символы почти не используются, потому что есть огромный риск отсечь больше аудитории, чем нужно
- Обязательно попробуйте добавить операторы при сборе семантики через Вордстат. Это поможет расширить ваше семантическое ядро
Настройка подключения оператора — Microsoft Teams
- Статья
- 7 минут на чтение
- Применимо к:
- Команды Майкрософт
В этой статье описывается настройка Operator Connect. Перед настройкой Operator Connect обязательно прочтите План для Operator Connect, чтобы получить информацию о предварительных требованиях и лицензировании.
Включить оператора
Вы можете включать, редактировать и удалять операторов в центре администрирования Teams. В левой навигационной панели перейдите к Голос > Операторы .
Чтобы включить оператора:
Выберите оператора. На вкладке Все операторы отфильтруйте доступных операторов по региону или услуге, чтобы найти оператора, подходящего для ваших потребностей в голосовой связи. Затем выберите оператора, которого хотите включить.
Выберите страны. В разделе Настройки оператора выберите страны, которые вы хотите включить с выбранным оператором.
Предоставьте контактную информацию Ваша контактная информация, включая ваше полное имя и адрес электронной почты, будет автоматически передана вашему оператору. Вы можете изменить эту информацию позже. Кроме того, вам нужно будет указать размер компании, и у вас будет возможность указать свой номер телефона. Операторы будут использовать эту информацию, чтобы связаться с вами и сообщить более подробную информацию об Operator Connect.
Принять уведомление о передаче данных.
Добавьте своего оператора. Выберите Добавить в качестве моего оператора для сохранения.
Настройка телефонных номеров
Способ настройки телефонных номеров зависит от того, настраиваете ли вы номера для новых пользователей или перемещаете существующие номера либо из планов звонков Microsoft, либо из прямой маршрутизации.
Если вам нужно получить номера телефонов для новых пользователей, см. статью Получение номеров для новых пользователей Teams.
Если вы хотите переместить существующие номера из планов звонков в Operator Connect, см. раздел Перенос номеров из планов звонков в Operator Connect.
Если вы хотите переместить существующие номера из прямой маршрутизации в операторскую, см. Перенос номеров из прямой маршрутизации в операторскую.
Присвоение номеров адресам экстренной помощи
Адрес экстренной помощи — это статическое местоположение, связанное с номером. Как только вы создадите адреса для экстренных случаев в центре администрирования Teams, то, как вы назначите адреса или измените их позже, будет зависеть от вашего оператора.
Чтобы назначить номера для экстренных вызовов, ваш оператор реализует один из трех сценариев:
Оператор назначает номерам телефонов экстренные адреса и позволяет изменить их позже в центре администрирования Teams.
Оператор не назначает адреса и позволяет назначать адреса для экстренных случаев телефонным номерам в центре администрирования Teams.
Оператор присваивает номерам телефонов адреса экстренных служб и не позволяет их менять. В этом случае вам нужно будет связаться со своим оператором, чтобы внести изменения в номера телефонов и назначенный им адрес для экстренной связи.
Дополнительные сведения об экстренных вызовах см. в разделах Управление экстренными вызовами и Планирование и настройка динамических экстренных вызовов.
Получение номеров для новых пользователей Teams
Чтобы получить номера для новых пользователей Teams, выполните следующие действия:
Назначьте лицензию на телефонную систему. . Вы можете назначить лицензию на телефонную систему своим пользователям из центра администрирования Microsoft 365 или с помощью PowerShell. Дополнительные сведения см. в статье Назначение дополнительных лицензий Teams пользователям.
Пользователи, которым будут назначены телефонные номера, полученные с помощью Operator Connect, должны находиться в режиме TeamsOnly. Если ваша организация находится в режиме TeamsOnly, то все ваши пользователи находятся в режиме TeamsOnly. Чтобы проверить это, в центре администрирования Teams перейдите к Teams > Параметры обновления Teams . Если ваша организация находится в режиме островов, проверьте, находятся ли определенные пользователи в режиме TeamsOnly. Перейдите к Users и выберите учетную запись пользователя. На вкладке «Учетная запись » в разделе «Обновление команд » режим сосуществования должен быть установлен на «TeamsOnly».
Получение номеров. Зайдите на веб-сайт своего оператора, чтобы заказать и приобрести телефонные номера. Чтобы просмотреть список веб-сайтов операторов, перейдите в каталог Microsoft 365 Operator Connect. Вам потребуется указать идентификатор клиента. Если вы не знаете свой идентификатор клиента, дополнительные сведения см. в статье Поиск идентификатора клиента Microsoft 365.
Назначение номеров. Как только ваш оператор выполнит заказ, он загрузит номера вашему арендатору. Вы можете просмотреть номера и поставщика в центре администрирования Teams, перейдя на Голос > Номера телефонов . Назначайте номера пользователям из центра администрирования Teams или с помощью PowerShell. Дополнительные сведения см. в разделе Назначение номеров.
Примечание
В дополнение к телефонным номерам для ваших пользователей вы можете получить платные или бесплатные телефонные номера для таких услуг, как аудиоконференции (для конференц-мостов), автосекретарей и очередей вызовов (также называемые служебными номерами). Телефонные номера службы имеют более высокую пропускную способность одновременных вызовов, чем телефонные номера пользователей или абонентов. Например, служебный номер может обрабатывать сотни вызовов одновременно, тогда как телефонный номер пользователя может обрабатывать только несколько вызовов одновременно. Для получения сервисных номеров обратитесь к своему оператору.
Перенос номеров из тарифных планов в Operator Connect
Свяжитесь со своим оператором, чтобы перенести ваши номера в Operator Connect. См. каталог Microsoft 365 Operator Connect, чтобы найти веб-сайт вашего оператора.
После того, как ваш оператор выполнит заказ на перенос, ваш оператор загрузит номера вашему арендатору.
Назначить оператору номера Connect для пользователей с помощью центра администрирования Teams или с помощью PowerShell. Дополнительные сведения см. в разделе Назначение номеров.
Перемещение номеров из Direct Routing в Operator Connect
Чтобы перейти из Direct Routing в Operator Connect с локальными или онлайновыми телефонными номерами, выполните следующие действия:
Шаг 1. Определите, назначены ли существующие номера Direct Routing онлайн или локально.
Убедитесь, что пользователю назначен номер прямой маршрутизации, выполнив команду модуля Teams PowerShell:
Get-CsPhoneNumberAssignment -AssignedPstnTargetId
Убедитесь, что NumberType
имеет DirectRouting.
Способ удаления существующих номеров прямой маршрутизации зависит от того, назначается ли номер локально или через Интернет. Чтобы проверить, выполните следующую команду модуля Teams PowerShell:
Get-CsOnlineUser -Identity| fl RegistrarPool, OnPremLineURI, LineURI
Если OnPremLineUri
заполнен номером телефона E.164, номер телефона был назначен локально и синхронизирован с Microsoft 365.
Чтобы перенести существующие номера прямой маршрутизации, назначенные онлайн, на Operator Connect , обратитесь к своему оператору. Чтобы найти веб-сайт вашего оператора, см. каталог Microsoft 365 Operator Connect. В согласованную дату и время ваш оператор перенесет ваши номера из Direct Routing в Operator Connect.
Чтобы перенести номера прямой маршрутизации, назначенные локально, в Operator Connect , выполните следующую команду Skype для бизнеса Server PowerShell:
Важно
Телефонный номер не будет обслуживаться во время миграции, поэтому перед началом согласуйте с вашим оператором Operator Connect.
Set-CsUser -Identity-LineURI $null
Время, необходимое для вступления удаления в силу, зависит от вашей конфигурации. Чтобы проверить, был ли удален локальный номер и синхронизированы ли изменения из локальной среды в Microsoft 365, выполните следующую команду модуля Teams PowerShell:
Get-CsOnlineUser -Identity| fl RegistrarPool, OnPremLineURI, LineURI
После синхронизации изменений с онлайн-каталогом Microsoft 365 ожидаемый результат:
RegistrarPool: pool.infra.lync.com ОнПремЛайнУРИ : LineURI :
Remove-CsPhoneNumberAssignment -Identity-PhoneNumber -PhoneNumberType DirectRouting
Удаление номера телефона может занять до 10 минут. В редких случаях это может занять до 24 часов. Чтобы проверить, был ли удален номер телефона, выполните следующую команду модуля Teams PowerShell:
Get-CsOnlineUser -Identity <пользователь> | эт ЛайнУри
Шаг 2. Удаление политики голосовой маршрутизации в сети, связанной с вашим пользователем
После отмены назначения номера удалите политику маршрутизации голосовой связи в сети, связанную с вашим пользователем, выполнив следующую команду модуля Teams PowerShell:
Grant-CsOnlineVoiceRoutingPolicy -Identity < пользователь> -PolicyName $Null
Шаг 3.
Получение телефонных номеровПерейдите на веб-сайт своего оператора, чтобы заказать и приобрести телефонные номера. Чтобы найти веб-сайт оператора, см. каталог Microsoft 365 Operator Connect. Вам потребуется указать идентификатор клиента. Если вы не знаете свой идентификатор клиента, дополнительные сведения см. в статье Поиск идентификатора клиента Microsoft 365.
Шаг 4. Назначьте номера телефонов
После того, как ваш оператор выполнит заказ, он загрузит номера вашему арендатору. Вы можете просмотреть номера и поставщика в центре администрирования Teams, выбрав Voice > Номера телефонов . Назначьте номера Operator Connect пользователям с помощью центра администрирования Teams или с помощью PowerShell. Дополнительные сведения см. в разделе Назначение номеров.
Назначение номеров
Сведения о том, как назначать номера телефонов пользователям, см. в разделе Назначение, изменение или удаление номера телефона для пользователя.
Управление вашими операторами
На вкладке Мои операторы вы можете просмотреть своих операторов и их статус и внести следующие изменения в ваш выбор:
- Управление услугами операторов по странам
- Приостановить работу оператора
- Удалить оператора
Примечание
Прежде чем удалить оператора из вашей организации или страны, вы должны удалить все телефонные номера, назначенные пользователям в организации или стране, и связаться с оператором, чтобы освободить номера.
Номера выпусков
Чтобы освободить номера телефонов из центра администрирования Teams, перейдите на страницу Телефонные номера и выберите номер.
Если номер телефона не назначен пользователю, выберите Release .
Если номер телефона назначен пользователю, вам потребуется отменить назначение номера. Выберите Изменить , затем Удалить пользователя . После сохранения изменений выберите Release .
- Планирование автосекретарей и очередей вызовов Teams
Прямые функции и операторы — изучение APL
Я придумал термин «объектно-ориентированный» и могу сказать вам, что не имел в виду C++. – Алан Кей
До сих пор мы в основном использовали APL как набор инструментов для работы с массивами с помощью встроенных примитивов. Конечно, это долгий путь, но чтобы в полной мере воспользоваться им, мы также должны иметь возможность создавать свои собственные функции и операторы. К счастью, синтаксис — если его вообще можно так назвать — для определяемых пользователем функций очень прост. Как кто-то сказал в чате APL Orchard, все, что вам нужно сделать, это «заключить код в фигурные скобки, и все готово». это не вполне что просто, но не за горами.
Определение dfn (прямая функция) заключено в пару фигурных скобок. Это то, что известно как анонимная функция или лямбда на других языках, что означает отсутствие синтаксического сахара для именования функции, кроме обычного присваивания с использованием Gets , ←
:
имя ← { ⍝ выражения }
Сначала немного неизбежного бритья яка: если dfn полностью помещается в одну строку, вы можете ввести его прямо в RIDE IDE. Пока так и ожидалось. Если ваш dfn занимает несколько строк, вы не можете (на момент написания статьи) просто ввести его. Dyalog работает над улучшением этого.
Вместо этого удобнее всего ввести такую функцию, сказав
)ed имя
, если вы хотите создать функцию с именем имя
. RIDE откроет свой редактор функций и позволит вам ввести свой код. Как только вы хотите протестировать свою функцию, вам сначала нужно сохранить ее, что на языке APL называется «исправить вашу функцию». Способ по умолчанию (и вы вряд ли когда-нибудь обнаружите это самостоятельно) исправить (сохранить) вашу функцию — нажать esc . Да, действительно. К счастью — и я рекомендую вам сделать это прямо сейчас — RIDE позволяет вам переназначать нажатия клавиш, щелкнув маленький символ клавиатуры в правом верхнем углу.
Найдите строку с надписью «Исправить текущую функцию» и сопоставьте ее с комбинацией клавиш , сохраните
на вашей платформе. И пока вы там, обратите внимание на привязку клавиш к «Вперед» и «Назад» — по умолчанию они равны ctrl-shift-enter и ctrl-shift-backspace . В REPL они означают «вперед/назад» в истории выполненных строк, как клавиши со стрелками в шелле. Вместо этого клавиши со стрелками перемещаются вверх и вниз в пространстве, в выводится , все же, для меня непонятное дизайнерское решение. Вы также можете переназначить «Сильное прерывание» на ctrl-c , пока вы это делаете.
Следует также отметить, что в RIDE нет визуальной подсказки о том, что окно редактора содержит несохраненные изменения. Это обязательно укусит вас рано или поздно.
В записной книжке Jupyter, как здесь, ввод функций может показаться немного более привычным: просто введите их в ячейку. Единственная причуда заключается в том, что для ввода многострочного dfn вам нужно начать ячейку с ]dinput
(что не требуется в окне редактирования RIDE). Вы можете на самом деле также используют ]dinput
способ ввода многострочной функции в интерпретаторе REPL, но (на мой взгляд) это довольно громоздко, если только вы не просто вырезаете и вставляете откуда-то еще. В предстоящей (на момент написания) версии 18.1 есть экспериментальная поддержка возможности ввода многострочных функций непосредственно в REPL, аналогично тому, как это работает в REPL Python.
Сначала наша уже знакомая прелюдия:
⎕IO ← 0 ]бокс на ]строки на
Был включен
Был выключен
Мы также собираемся сделать некоторые утверждения, так что давайте создадим для этого вспомогательную функцию, любезно предоставленную легендой APL Роджером Хуи (и пока не будем спекулировать на ее внутренней работе):
утверждать ← {⍺ ← 'ошибка утверждения' ⋄ 0∊⍵: ⍺ ⎕сигнал 8 ⋄ застенчивый ← 0}
Левый и правый аргументы:
⍺
, ⍵
] ввод МояПерваяФункция ← { ⍝ Добавить левый и правый ⍺+⍵ }
32 Моя первая функция 98
Первое, на что следует обратить внимание, это глифы ⍺
и ⍵
; греческие буквы альфа и омега. Альфа, первая буква греческого алфавита, связана с левым аргументом функции, а омега, последняя буква греческого алфавита, связана с правым аргументом функции.
Второе, что нужно усвоить, это то, что выражения APL разделяются символом новой строки (или символом ромба, ⋄
, к которому мы вернемся позже). Мы могли бы переписать приведенную выше функцию, чтобы использовать промежуточную переменную:
] ввод Сумма ← { ⍝ Добавить левый и правый всего ← ⍺+⍵ общий }
32 Сумма 98
В-третьих, отсутствует оператор return. Функция возвращает первое не присвоенное значение. Это стоит усвоить: функция возвращает значение в первый же момент, когда вы делаете что-либо, не являющееся присваиванием. В приведенной выше функции точкой возврата является просто указание переменной total
.
Левый аргумент по умолчанию
Полезной функцией является то, что вы можете установить значение по умолчанию для левого аргумента, ⍺
. Сравните:
{⍺ ← ¯99 ⋄ ⍺+⍵} 99 57 {⍺ ← ¯99 ⋄ ⍺+⍵} 99
Таким образом, функция может вести себя по-разному в зависимости от того, вызывается ли она монадически или диадически. Если вы зададите значение ⍺
с помощью ←
, то ⍺
будет иметь это значение, если вы не передали функции левый аргумент. С другой стороны, если вы do передадите левый аргумент, строка «альфа получает» не будет иметь никакого эффекта. При задании левого аргумента таким образом по умолчанию обратите внимание, что это работает только для первый раз, когда вы присваиваете значение альфе, что, возможно, очевидно, если подумать:
{⍺ ← ¯99 ⋄ ⍺ ← ¯999999 ⋄ ⍺+⍵} 99
Установка значения по умолчанию для левого аргумента является полезным инструментом, если вы пишете рекурсивные dfns, которые обычно накапливают свой результат для левого аргумента. Таким образом, вы можете вызвать монадическую функцию для запуска, но последующие итерации могут использовать левый аргумент для создания результата. Мы еще поговорим о рекурсии позже, в главе, посвященной методам итерации, а сейчас мы попробуем продемонстрировать метод левого аргумента по умолчанию. Глиф Del ( ∇
) является ссылкой на самую внутреннюю функцию:
] ввод сумма ← { ⍺ ← 0 ⍝ Инициализировать аккумулятор 0=≢⍵:⍺ ⍝ Если правый аргумент пустой вектор, вернуть аккумулятор, см. ниже! (⍺+⊃⍵)∇1↓⍵ ⍝ Добавить голову к аккумулятору, выполнить рекурсию по хвосту }
сум ⍳10 100 сум ⍳10
Альтернатива
Как насчет чередования? Мы получили краткое представление об условном возврате в приведенном выше примере — оператор защиты . Напомним, что для нас нет if-оператора. А охранник , определяемый двоеточием, говорит, что если выражение слева от двоеточия истинно, возврат из функции со значением справа от двоеточия. Надуманный пример:
] ввод Палинский ← { rev ← ⊖⍵ ⍝ Перевернуть правый аргумент rev≡⍵: 1 ⍝ Если правый аргумент совпадает с реверсом, вернуть 1 0 ⍝ В противном случае вернуть 0 }
Палинский 1 2 3 2 1 Палинский 1 2 3 4 5 палинский 3
Во избежание сомнений мы могли бы, конечно, записать это как
{⍵≡⊖⍵} 1 2 3 2 1 ⍝ Анонимная (безымянная) версия
Обратите внимание, что поток выполнения , а не продолжается после защитного выражения, даже если это было присваивание. Это требует некоторых размышлений при написании кода, который должен условно «сделать что-то», а затем продолжить, как показано в следующем бессмысленном фрагменте, похожем на Python:
по определению foo(аргумент): фум = 57 плата = 8 если флёрп(аргумент) < 47: плата = 92 фум = флумм (аргумент) возврат + фум
На самом деле, мы можем тривиально превратить это в APL, используя только то, что уже знаем:
foo ← {47>flerp ⍵: 92+flumm ⍵ ⋄ 57+8} ⍝ Примечание: алмазный сепаратор
Давайте рассмотрим некоторые возможные шаблоны для создания потока, в котором выполнение продолжается после ветки «если-то-иначе». На пути к использованию анонимной функции, по сути, как Python
.а = 42 если ответ другой -99
] ввод фу ← { ответ ← ⍵ a ← {⍵:42 ⋄ ¯99} ответ ⍝ ...выполнение следует здесь ⍝ сделать что-нибудь с }
В этом случае, поскольку ответ
является логическим значением, мы могли бы полностью избежать внутренней функции, просто выбрав значения из двухэлементного вектора (примечание: для этого требуется ⎕IO ← 0
):
] ввод foo ← {⎕IO ←0 ответ ← ⍵ а ← ответ⊃¯99 42 ⍝ . ..выполнение следует здесь ⍝ сделать что-нибудь с }
С помощью первого метода (анонимная функция) у нас есть возможность расширить работу, выполняемую в каждой ветви, усложнив функцию, но в конечном итоге она все равно возвращает значение. Что, если нам нужно изменить несколько значений? Конечно, мы могли бы вернуть множество вещей, это вполне правильный подход.
Правила области видимости имени в Dyalog представляют собой смесь динамической и лексической области видимости. Вот что говорят об этом документы Dyalog:
Когда внутренний (вложенный) dfn ссылается на имя, интерпретатор ищет его, просматривая вложенные dfn наружу, а не ища назад по индикатору состояния.
Лексическая область действия — это почти наверняка «то, что вы ожидаете». Однако, поскольку в Dyalog нет специального синтаксиса для объявления переменной, кроме присвоения ей значения, если вам нужно изменить переменную, не представленную в самой внутренней dfn, нам нужен способ указать это.
Рассмотрим следующее:
] ввод фу ← { а ← 45 _ ← {a ←¯99}⍬ а }
foo ⍬ ⍝ Примечание: 45, а не ¯99
Самая внутренняя функция создает новую переменную с лексической областью видимости с именем a . Так как же изменить состояние, определенное вне функции? Вот тут-то и появляется измененное назначение .
Измененное назначение
Измененное задание должно показаться знакомым любому программисту на C или Python среди вас:
# Модифицированное присваивание в стиле Python а = 45 a += 45 # теперь а равно 90
В APL мы также можем изменить значение существующей переменной через функцию, например:
] ввод фу ← { а ← 45 _ ← {а + ← 45}⍬ а }
⎕ ← r ← foo ⍬ утверждать г = 90
Чрезвычайно полезный, но, возможно, неинтуитивный кикер: вы можете использовать измененное назначение с Правым галсом ( ⊢
) до установить значений:
] ввод фу ← { а ← 45 _ ← {а ⊢ ← ¯99}⍬ а }
⎕ ← r ← foo ⍬ утверждать, что r=¯99
Мы уже встречали множество выбираемых выражений присваивания, когда говорили об индексации. Мы можем использовать все это здесь. Например, мы можем мутировать ячейки в матрице, используя скобочное индексирование:
] ввод фу ← { a ← 3 3⍴1 ⍝ Матрица 3×3 из всех 1 _ ← {а[1;1] ← 0}⍬ а }
⎕ ← r ← foo ⍬ утверждать r≡3 3⍴1 1 1 1 0 1 1 1 1
1 1 1 1 0 1 1 1 1
Прямые операторы
Мы уже встречались с некоторыми встроенными операторами APL, такими как Уменьшить и Селфи . Операторы, возможно, ближе всего подходят APL к парадигме функционального программирования. Оператор — это функция, которая возвращает производную функцию. Оператор может принимать другие функции в качестве своих операндов .
Учесть Уменьшить , /
. Это монадический оператор , который возвращает производную функцию, которую можно вызывать как монадически, так и двоично:
2 (+/) ⍳10 ⍝ Скобки не требуются, они добавлены в иллюстративных целях
1 3 5 7 9 11 13 15 17
Здесь мы видим одноместный оператор редукции, единственным операндом которого является плюсовая функция. Производная функция, которую она возвращает, plus-reduce, вызывается в виде диады, с 2 слева от нее и ⍳10
справа. В данном случае оконное сокращение. Мы могли бы сказать
суммировано ← +/ 2 в сумме ⍳10
1 3 5 7 9 11 13 15 17
, чтобы подчеркнуть тот факт, что оператор действительно возвращает функцию.
Dyalog также позволяет нам писать собственные операторы, очень похоже на то, как мы пишем dfns. Звоним своим операторам прямых операторов , отныне просто дублирует . Операторы могут быть мощными, но на практике потребность в них возникает редко. Причина этого в том, что встроенные операторы уже позволяют вам применять свои собственные функции различными способами.
На что обратить внимание при работе с операторами:
В dop ,
⍺⍺
представляет левый операнд, а⍵⍵
— правый операнд.В отличие от монадического dfn , который принимает аргумент right , монадический dop принимает аргумент left , как мы только что видели в случае с reduce.