在函数式编程中,以下函数运算符P
的名称(或概念的名称)是什么?:
鉴于两个函数
f
和g
以及谓词函数p
,P(p, f, g)
是函数x → if (p(x)) f(x) else g(x)
我想知道这个运算符是否具有已建立的名称,以便我可以在我的代码中使用该名称。 (也就是说,我想给P
一个传统名称。)
答案 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
包含True
和False
个案例的值,并产生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] []
# []