如果Haskell使用"!"会有什么影响.而不是关键字"不"作为逻辑运算符而不是?

Alo*_*rld 0 haskell

我是一名新的Haskell学习者.我不太了解Haskell背后的语法机制.

在一些命令式编程语言中,例如C/Java,感叹号"!" 用作逻辑而不是.

同时,Haskell使用关键字"not"作为"逻辑不".但是,Haskell使用"&&"和"||" 作为逻辑运算符.

显然,Haskell避免使用"!" 表达"不"的概念,例如"不等于"是"/ ="但不是"!=".

从另一个角度来看,我想,如果将关键字"模块"更改为"包",除了在所有现有代码中用"包"更改所有"模块"之外,不会发生任何严重的事情.

我想知道,如果将关键字"not"更改为"!" 在Haskell,会发生什么?

补充:

  1. 正如@chi指出的那样,我犯了一个错误."not"不是关键字,它是一个库函数.
  2. 正如@ user202729指出的那样,我没有清楚地说出我的问题.我想知道当"不"被"!"取代时会发生什么.也就是说,当创始人设计Haskell并使用"!"时 按照逻辑而不是,可能"!" 不能用作数组索引.然后创始人尝试另一种方法来索引数组中的元素(用[]?我不知道).然后像连锁反应这样的东西继续存在.这会改变Haskell吗?

luq*_*qui 7

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

{-# LANGUAGE PostfixOperators #-}

(!) = not

main = print (True !)
-- False
Run Code Online (Sandbox Code Playgroud)

我觉得这很合理,不是.

  • 您的`GHCi`交互式提示没有激活`PostfixOperators`扩展名.试试`:set -XPostfixOperators`. (2认同)

Pau*_*son 5

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

唯一的例外是一元减号,这是一种特定的词汇黑客,旨在绕过人们期望能够编写例如

x = (-y) * 5
Run Code Online (Sandbox Code Playgroud)

然而,这有一个缺点,即 while(*5)是一个“节”(即给定一个参数并返回一个需要另一个参数的二元运算符),(-y)它不是一个节,而是 的否定y

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

xs = map (*5) ys
Run Code Online (Sandbox Code Playgroud)

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

xs = map (-5) ys
Run Code Online (Sandbox Code Playgroud)

相反你必须写

xs = map (subtract 5) ys
Run Code Online (Sandbox Code Playgroud)