ruby - 是否存在与 Perl 或 Ruby 中的触发器运算符等效的函数式编程概念?

标签 ruby perl functional-programming flip-flop

Ruby(和 Perl)有一个触发器的概念:

file = File.open("ordinal")
while file.gets
  print if ($_ =~ /third/) .. ($_ =~ /fifth/)
end

它给出了一个序数列表,例如

first
second
third
fourth
fifth
sixth

打印到“third”时开始打印,打印到“fifth”时停止:

third
fourth
fifth

是否有与此类似的函数式编程概念,或者这通常用 takewhile 来描述?我问的不是特定语言,而是您会用什么术语来描述它。

最佳答案

在像 haskell 这样的函数式语言中,您可以将触发器和触发器条件作为谓词传递,并根据它过滤输入列表。比如下面是haskell中flipflop的定义(不懂haskell的不用担心实现,关键是怎么用):

flipflop flip flop = 
  uncurry (++) . second (take 1) . break flop . dropWhile (not . flip)

它是这样使用的:

> flipflop (== 3) (== 5) [1..10]
[3,4,5]

这是一个通过使用高阶函数来构建有效的新语言结构的例子。

我不知道该结构在函数式语言中是否有专门的名称。

关于ruby - 是否存在与 Perl 或 Ruby 中的触发器运算符等效的函数式编程概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462018/

相关文章:

regex - Perl 中的递归正则表达式

C# 为 `WhereWithIndex` 编写类型签名

ruby-on-rails - 具有 has_one 关系的两级深度嵌套形式中的不允许参数

ruby-on-rails - 将哈希数组相互比较,两种方式

ruby-on-rails - 使用 Windows 为 Ruby on Rails 启动脚本/控制台

regex - Perl Regex 查找并返回每个可能的匹配项

ruby - 是否有类似于 Class#inherited 的钩子(Hook),仅在 Ruby 类定义后触发?

perl - 如何在perl中以相反的方向读取文件

haskell - 在 Haskell 中编写一个函数来获取大小为 n 的所有子序列?

javascript - Mithril js - 跨组件通信模式