我正在尝试编写一个自定义强力查询函数,将给定的字符串转换为其二元组列表。
例如,应该输出“Hi World”
列表 | |
---|---|
1 | 嗨 |
2 | iW |
3 | 我 |
4 | 或 |
5 | rl |
6 | ld |
我在 M here 中偶然发现了一个递归函数的实现,这让我写下了这个:
( String1 as text ) =>
let
S1 = Text.Remove(String1, " "),
String1_Tokens = Text.ToList(S1),
N = List.Count(String1_Tokens),
func = (x as list, n as number, y as list) =>
let
Calc = Text.Combine({x(n), x(n+1)}),
Lister = List.Combine({y,{Calc}}),
Check = if n = N-1 then Lister else @func(x, n+1, Lister)
in Check,
res = func(String1_Tokens, 1, {})
in res
基本思想是清除字符串中的空格并将其分解为其组成符号的列表。然后将该列表传递给一个函数,该函数采用列表中的第 nth 和 n+1th 符号并将它们连接起来,然后将它们附加到已有的二元组列表中。重复此操作,直到符号列表用完为止。
当尝试使用输入字符串调用此函数时,出现以下错误:
“”查询发生错误。 Expression.Error:我们无法将 List 类型的值转换为 Function 类型。 细节: 值=[列表] 类型=[类型]
我错过了什么?我对 M 还很陌生,所以我觉得我肯定错过了一些基本的东西。
你快明白了!
( String1 as text ) =>
let
S1 = Text.Remove(String1, " "), // Remove spaces
String1_Tokens = Text.ToList(S1), // Convert the string to a list of characters
N = List.Count(String1_Tokens), // Get the length of the list
func = (x as list, n as number, y as list) =>
let
// Combine the current and next characters
Calc = Text.Combine({x{n}, x{n+1}}),
// Append the result to the list
Lister = List.Combine({y, {Calc}}),
// Check if we are at the second to last element, stop recursion if we are
Check = if n = N-2 then Lister else @func(x, n+1, Lister)
in
Check,
// Start the recursion at index 0
res = func(String1_Tokens, 0, {})
in
res