Проверка того, являются ли значения прописными или строчными

Я пытаюсь создать функцию в q/kdb+, которая может определить, является ли строка, переданная функции, в верхнем регистре (истина) ИЛИ в нижнем регистре (ложь)

Я сделал несколько попыток, но я постоянно натыкаюсь на блокпост Вот моя функция, буду признателен за помощь. ТИА

isAllCaps: {[input] if[input = lower; show 0b; show 1b]}

Вышеупомянутая функция в основном принимает ввод, как указано. Затем он проверяет из оператора if, является ли он ниже, если он ниже, то он должен вернуть ложь (0b), если нет, то вернуть истину (1b). Действительно борется с чем-то настолько простым здесь. Я просто получаю следующую ошибку:

evaluation error:

type

  [1]  isAllCaps:{[input] if[input = lower; show 0b; show 1b]}
                                   ^

  [0]  isAllCaps"a"

Я также пробовал другие методы, но только определенные входы были успешными. Например:

isAllCaps: {[x] if[ x = upper type 10h; show 1b; show 0b]}

Это равносильно тому, что если x является строкой верхнего типа, показать true, иначе показать false. Опять получаю ошибку типа. Почему? Все тесты представлены в виде строк, например, «John_Citizen» и т. д. и т. д.

РЕДАКТИРОВАТЬ Пробовал это, но я получаю 2 выхода.

isAllCaps: {[L] if[L = lower L; show 0b; show 1b] } Am I missing something?

isAllCaps: {[L] if[L = нижний L; показать 0b]; show 1b } Кажется, это дает лучшие результаты, но в случае более низкого char выдает 0 и 1

Aanwar 19.03.2022 04:42

Кажется, теперь это работает, но не работает со строками, содержащими более одного символа isAllCaps:{[L] if[L = lower L; показать 0b] если[L = верхний L; показать 1b]}

Aanwar 19.03.2022 05:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
84
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуйте следующий код:

isAllCaps: {[L] show L~upper L};

Он показывает 1b, если строка в верхнем регистре, и 0b в противном случае.

В вашем коде 2 ошибки

  1. ~ следует использовать для сравнения строк. = выполняет сравнение персонажей. т.е. "aa"~"aa" дает 1b, но "aa" = "aa" дает 11b
  2. Используйте if-else вместо if. Дополнительные сведения см. в статье 10.1.1 Базовая условная оценка.

Большое спасибо! Да, код, который вы мне дали, работает! Как бы я использовал if-else? Однако я проверил это на главной странице и немного запутался :|

Aanwar 19.03.2022 13:14

show отображает результат, а также возвращает его; вполне можно было бы опустить.

SJT 21.03.2022 11:55

Управляющее слово if лучше всего зарезервировать для побочных эффектов, таких как сигнализация об ошибке. Там, где требуется результат, лучше использовать троичное условное выражение Конд., которое возвращает результат. Но в этом случае тест является требуемым результатом и может быть просто возвращен — неявно без необходимости show.

SJT 21.03.2022 11:58

Вы можете использовать встроенный заглавный алфавит .Q.A для достижения желаемого:

{all x in .Q.A} 

Эта лямбда вернет 1b, если входная строка состоит только из заглавных букв, и false в противном случае.

Оцените логику, но она не будет работать со строками типа «AAA_123» с числами и всем остальным. А в остальном хорошая штука!

Aanwar 19.03.2022 13:13

Начните с устранения некоторых недоразумений.

  1. lower возвращает нижний регистр своего аргумента.
  2. show отображает и возвращает свой результат. Вы можете использовать его, так как вы должны обеспечить вывод результата функции на консоль, но это не обязательно, как, например, return в JavaScript.
  3. Если у вас есть логическое значение в результате теста, это может быть просто ваш результат.
  4. Сравните строки на равенство, используя Совпадение~, а не Равно

Тем не менее, две стратегии: проверить символы нижнего регистра .Q.a или преобразовать в верхний регистр и посмотреть, есть ли разница.

q){not any x in .Q.a}"AAA_123"
1b
q){not any x in .Q.a}"AaA_123"
0b

Вторую стратегию вряд ли можно было бы написать проще:

q){x~upper x}"AaA_123"
0b
q){x~upper x}"AAA_123"
1b

Вместе с оператором Применять. конструкция Дзен монахи дает вам быстрый «бесточечный» код — нет необходимости в лямбде:

q).[~] 1 upper\"AaA_123"
0b
q).[~] 1 upper\"AAA_123"
1b

Другие вопросы по теме