是否存在与 Perl 或 Ruby 中的触发器运算符等效的函数式编程概念?
Ruby(和 Perl)有一个触发器的概念:
file = File.open("ordinal")
while file.gets
print if ($_ =~ /third/) .. ($_ =~ /fifth/)
end
它给出了一个序数列表,例如
first
second
third
fourth
fifth
sixth
在到达“第三”时开始打印,在到达“第五”时停止:
third
fourth
fifth
是否有与此类似的函数式编程概念,或者这通常会用 takewhile
来描述?我不是在问某种特定的语言,只是问你会用什么术语来描述它。
Ruby (and Perl) has a concept of the flip flop:
file = File.open("ordinal")
while file.gets
print if ($_ =~ /third/) .. ($_ =~ /fifth/)
end
which given a list of ordinals, such as
first
second
third
fourth
fifth
sixth
would start printing when it reached "third" and stop when it reached "fifth":
third
fourth
fifth
Is there a functional programming concept analogous to this, or would this normally be described in terms of takewhile
s? I'm not asking about a particular language, just what term you'd use to describe it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
与 @nanothief 的解决方案相同,但在 Scala 中:
示例运行:
Same as @nanothief's solution, but in Scala:
Sample runs:
在函数式语言(例如 haskell)中,您可以将触发器条件作为谓词传递,并根据它过滤输入列表。例如,下面是 haskell 中
flipflop
的定义(如果你不了解 haskell,不用担心实现 - 关键部分是它的使用方式):使用:
这是一个仅通过使用高阶函数来创建有效的新语言构造的示例。
我不知道函数式语言中该构造是否有一个特殊的名称。
In a functional language such as haskell, you would pass in the flip and flop conditions as predicates, and filter an input list based on it. For example, the following is a definition of
flipflop
in haskell (don't worry about the implementation if you don't know haskell - the key part is how it is used):This is how it can be used:
It is an example of making an effectively new language construct just by using higher ordered function.
I don't know if there is a special name for that construct in functional languages.
取决于函数式语言。这个怎么样?
补充:当然,Ruby 不是纯函数式语言,所以我决定用 Erlang 重写它:
注意: 事实上,经典的触发器应该像 dropwhile( !第一)-> takewhile(!second),所以 Ruby 的触发器是临时触发器(与电子器件中的触发器相比)。
Depends on functional language. How about this?
Added: Of course, Ruby is not a pure functional language, so I decided to rewrite it in Erlang:
Note: In fact, classic flip-flop should work like dropwhile(!first) -> takewhile(!second), so Ruby's flip-flop is ad hoc one (compare with flip-flop in electronics).