检查值是大写还是小写
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个错误
~
应该用来比较字符串。 =
进行 character-wise 比较。 IE。 "aa"~"aa"
给出 1b
,但 "aa"="aa"
给出 11b
- 使用
if-else
,而不是 if
。有关详细信息,请参阅 10.1.1 Basic Conditional Evaluation
您可以使用 in-built 大写字母表 .Q.A
来实现您想要的:
{all x in .Q.A}
如果输入字符串仅包含大写字母,则此 lambda 将 return 1b
,否则为 false。
首先消除一些误解。
lower
returns 其参数的小写。
show
显示并 returns 结果。您可以使用它,因为您必须确保函数的结果打印在控制台上,但这不是必需的,例如 return
将在 JavaScript. 中
- 如果你有一个布尔值作为测试结果,那可以就是你的结果。
- 使用 Match
~
rather than Equals 比较字符串是否相等
也就是说,有两种策略:测试 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
我正在尝试在 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个错误
~
应该用来比较字符串。=
进行 character-wise 比较。 IE。"aa"~"aa"
给出1b
,但"aa"="aa"
给出11b
- 使用
if-else
,而不是if
。有关详细信息,请参阅 10.1.1 Basic Conditional Evaluation
您可以使用 in-built 大写字母表 .Q.A
来实现您想要的:
{all x in .Q.A}
如果输入字符串仅包含大写字母,则此 lambda 将 return 1b
,否则为 false。
首先消除一些误解。
lower
returns 其参数的小写。show
显示并 returns 结果。您可以使用它,因为您必须确保函数的结果打印在控制台上,但这不是必需的,例如return
将在 JavaScript. 中
- 如果你有一个布尔值作为测试结果,那可以就是你的结果。
- 使用 Match
~
rather than Equals 比较字符串是否相等
也就是说,有两种策略:测试 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