Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以简化以下Haskell lambda吗?_Haskell - Fatal编程技术网

我可以简化以下Haskell 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

我想用合成或更高阶的魔法来简化下面的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

真有趣<只要输入不相同,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是否相同,它只会引发一个冲突的定义编译时错误。