我可以简化以下Haskell lambda吗?
我想用合成或更高阶的魔法来简化下面的lambda我可以简化以下Haskell lambda吗?,haskell,Haskell,我想用合成或更高阶的魔法来简化下面的lambda (\a b -> if (b) then (not a) else a) 但我想不出一个聪明的办法。你能帮我一下吗 谢谢。让我们看看真相表: a b f ------------+------- False False | False False True | True True False | True True True | False 真有趣f即为True。嗯……正如另一位用户指出的,这是一个xor
(\a b -> if (b) then (not a) else a)
但我想不出一个聪明的办法。你能帮我一下吗
谢谢。让我们看看真相表:
a b f
------------+-------
False False | False
False True | True
True False | True
True True | False
真有趣<只要输入不相同,code>f即为
True
。嗯……正如另一位用户指出的,这是一个xor
的例子,那么我们如何定义这个函数呢
如果输入相等,则结果为假。
如果输入不相等,则结果为真
\x y -> x /= y
编辑:评论是正确的,我的坏!我之前给出的定义不起作用。为什么要合成?我认为这看起来很简单。我们可以重写,但这取决于你希望表达式有多大的灵活性。嘿@sumitmahamini我只是一个初学者,我很想知道是否有一个聪明的方法来编写它。参考其他答案,但只定义一个函数
xor a b=如果b,那么不是a,其他a
看起来不错。如果你不需要它,你可以把它放在当前函数的where
声明中。它是xor,但我不知道如何巧妙地实现它:(@Rohit,太好了!顺便说一句,在Haskell中它的拼写是/=
。你可以把(\ab->a/=b)
简单地写成(/=)
;它是一种适用于所有中缀运算符的符号。xor x
不检查x
s是否相同,它只会引发一个冲突的定义编译时错误。