如果Haskell使用“!”会产生什么影响?而不是关键字“ not”作为逻辑非运算符?

时间:2018-07-14 08:20:53

标签: haskell

我是Haskell的新学习者。我对Haskell背后的语法机制了解不多。

在某些命令式编程语言中,例如C / Java,感叹号“!”不用作逻辑。

与此同时,Haskell将关键字“ not”用作“逻辑非”。但是,Haskell使用“ &&”和“ ||”作为逻辑运算符。

很明显,Haskell避免使用“!”表达“不”的概念,例如“不等于”是“ / =“,而不是“!=”。

换一种说法,我猜想,如果将关键字“模块”更改为“程序包”,除了将所有现有代码中的所有“模块”改为“程序包”之外,不会发生任何严重的事情。

我想知道,是否有人将关键字“ not”更改为“!”在Haskell,会发生什么?

补语:

  1. 正如@chi所指出的,我犯了一个错误。 “ not”不是关键字,它是一个库函数。
  2. 正如@ user202729所指出的,我并没有清楚地说出我的问题。我想知道将“ not”替换为“!”会发生什么。也就是说,当创始人设计Haskell时,他们使用“!”不合逻辑地工作,也许“!”不能用作数组索引。然后,创始人尝试使用另一种方法来索引数组中的元素(使用[]?我不知道)。然后像链式反应这样的事情继续进行。这会大大改变Haskell吗?

2 个答案:

答案 0 :(得分:7)

如果您对后缀运算符感到满意,甚至可以尝试此操作,但这需要使用PostfixOperators语言扩展名

{-# LANGUAGE PostfixOperators #-}

(!) = not

main = print (True !)
-- False

我觉得这很合理,

答案 1 :(得分:4)

Haskell没有一元前缀运算符,因此您不能像其他所有运算符一样将其定义为库函数。

唯一的例外是unary minus,这是一种特殊的词汇技巧,可以避免人们期望能够写例如以下内容的事实。

x = (-y) * 5

但这有一个缺点,尽管(*5)是一个“节”(即给定一个参数的二进制运算符,并返回一个期望另一个的函数),而(-y)不是节,但是y的否定。

因此,如果您想将列表中的所有成员乘以5,可以这样做

xs = map (*5) ys

但是,如果您想从列表的所有成员中减去5,这将不起作用:

xs = map (-5) ys

相反,您必须写

xs = map (subtract 5) ys