公共模式匹配函数运算符的名称

时间:2017-06-10 17:32:20

标签: functional-programming

在函数式编程中,以下函数运算符P名称(或概念的名称)是什么?:

  

鉴于两个函数fg以及谓词函数pP(p, f, g)是函数

x → if (p(x)) f(x) else g(x)

我想知道这个运算符是否具有已建立的名称,以便我可以在我的代码中使用该名称。 (也就是说,我想给P一个传统名称。)

2 个答案:

答案 0 :(得分:2)

我会说if运算符被提升到函数monad中。

例如在Haskell中,您可以直接执行

import Control.Monad
let if' c t f = if c then t else f  -- another common name is `ite`
let ifM = liftM3 if'                -- admittedly the type of this is too generic
--        ^^^^^^^^^^
let example = ifM even (\x -> "t "++show x) (\x -> "f "++show x)
example 1 -- "f 1"
example 2 -- "t 2"

答案 1 :(得分:0)

布尔库中的另一个haskell示例Point-wise conditional

cond :: (Applicative f, IfB a, bool ~ BooleanOf a) => f bool -> f a -> f a -> f a

需要Applicative保留bool,另外两个Applicatives包含TrueFalse个案例的值,并产生Applicative结果。

Applicative的不同类型,而功能只是其中之一。

> f = cond (\x -> x > 1) (\x -> x / 10) (\x -> x * 10)
> f 2.0  
# 0.2
> f 0.13 
#1.3

可选值Maybe是另一个有用的示例

> cond (Just True) (Just 10) (Just 20)
# Just 10
> cond (Just True) (Just 10) Nothing
# Nothing

List也是Applicative

> cond [True, False, True] [10] [1, 2]
# [10,10,1,2,10,10]
> cond [True, False, True] [10] [1]
# [10, 1, 10]
> cond [True, False, True] [10] []
# []