检查数组的修改元素是否是同一数组中的成员
Checking if a modified element of an array is a member in the same array
我有一个数组:
{ "abc" "def" "cba" "fed" "junk" }
我想检查数组中的每一项是否有其反向版本作为同一数组中的成员。
在Python中,我会表达为:
>>> array = ["abc", "def", "cba", "fed", "junk"]
>>> [item for item in array if item[::-1] in array] # [::-1] reverses a string
['abc', 'def', 'cba', 'fed']
甚至:
>>> list(filter(lambda x: x[::-1] in array, array))
['abc', 'def', 'cba', 'fed']
我试过:
IN: scratchpad dup [ dup reverse swap member? ] filter
--- Data stack:
{ "abc" "def" "cba" "fed" "junk" }
{ }
不行,每个项目的报价都失败了。
我确信有一个明显的答案,或者一个组合器和引用可以有效地做到这一点。这是什么?
这里你需要一个闭包。每个元素上 运行s 的引用需要查看元素本身以外的值。使用 fried quotations 实现了编写闭包的便捷语法。
例如:
{ "abc" "def" "cba" "fed" "junk" } dup '[ reverse _ in? ] map
您将 "outside" 堆栈中的值绑定到 "inside" 上的 _
位置。您可以使用 with
或使用 curry
构建一个等效的闭包 运行 ,这是一个更低级的词:
{ "abc" "def" "cba" "fed" "junk" } dup [ reverse swap in? ] with map
然后添加 all?
以检查所有值是否满足谓词:
{ "abc" "def" "cba" "fed" "junk" } dup '[ reverse _ in? ] all?
USE: sets
加载 in?
单词。
我有一个数组:
{ "abc" "def" "cba" "fed" "junk" }
我想检查数组中的每一项是否有其反向版本作为同一数组中的成员。
在Python中,我会表达为:
>>> array = ["abc", "def", "cba", "fed", "junk"]
>>> [item for item in array if item[::-1] in array] # [::-1] reverses a string
['abc', 'def', 'cba', 'fed']
甚至:
>>> list(filter(lambda x: x[::-1] in array, array))
['abc', 'def', 'cba', 'fed']
我试过:
IN: scratchpad dup [ dup reverse swap member? ] filter
--- Data stack:
{ "abc" "def" "cba" "fed" "junk" }
{ }
不行,每个项目的报价都失败了。
我确信有一个明显的答案,或者一个组合器和引用可以有效地做到这一点。这是什么?
这里你需要一个闭包。每个元素上 运行s 的引用需要查看元素本身以外的值。使用 fried quotations 实现了编写闭包的便捷语法。
例如:
{ "abc" "def" "cba" "fed" "junk" } dup '[ reverse _ in? ] map
您将 "outside" 堆栈中的值绑定到 "inside" 上的 _
位置。您可以使用 with
或使用 curry
构建一个等效的闭包 运行 ,这是一个更低级的词:
{ "abc" "def" "cba" "fed" "junk" } dup [ reverse swap in? ] with map
然后添加 all?
以检查所有值是否满足谓词:
{ "abc" "def" "cba" "fed" "junk" } dup '[ reverse _ in? ] all?
USE: sets
加载 in?
单词。