检查值是大写还是小写

Checking whether values are Upper case or lower case

我正在尝试在 q/kdb+ 中构建一个函数,它可以检测传递给该函数的字符串是大写 (True) 还是小写 (false)

我已经做了几次尝试,但总是遇到障碍 这是我的功能,将不胜感激。 TIA

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

以上函数基本上接受指定的输入。然后它从 if 语句检查它是否更低,如果它更低那么它应该 return 一个假(0b),如果不是那么 return 一个真(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] show L~upper L};

如果字符串是大写则显示1b,否则显示0b

你的代码有2个错误

  1. ~应该用来比较字符串。 = 进行 character-wise 比较。 IE。 "aa"~"aa" 给出 1b,但 "aa"="aa" 给出 11b
  2. 使用 if-else,而不是 if。有关详细信息,请参阅 10.1.1 Basic Conditional Evaluation

您可以使用 in-built 大写字母表 .Q.A 来实现您想要的:

{all x in .Q.A} 

如果输入字符串仅包含大写字母,则此 lambda 将 return 1b,否则为 false。

首先消除一些误解。

  1. lower returns 其参数的小写。
  2. show 显示并 returns 结果。您可以使用它,因为您必须确保函数的结果打印在控制台上,但这不是必需的,例如 return 将在 JavaScript.
  3. 如果你有一个布尔值作为测试结果,那可以就是你的结果。
  4. 使用 Match ~ rather than Equals
  5. 比较字符串是否相等

也就是说,有两种策略:测试 lower-case 个字符 .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

Apply . operator, the Zen monks 结构一起为您提供快速的“point-free”代码——不需要 lambda:

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