是否有强类型编程语言允许您定义新的运算符?

nik*_*sfi 8 math programming-languages operators

我目前正在寻找一种编程语言来编写数学课.我知道周围有很多很多,但是因为我下学期要开始学习数学,所以我认为这可能是一个很好的方法.深入了解我所学到的知识.

谢谢你的回复.

顺便说一句:如果你想知道我想问的是什么:

"是否有强类型编程语言允许您定义新的运算符?"

ram*_*ion 19

就像EFraim所说,Haskell使这很容易:

% ghci
ghci> let a *-* b = (a*a) - (b*b)
ghci> :type (*-*)
(*-*) :: (Num a) => a -> a -> a
ghci> 4 *-* 3
7
ghci> 1.2 *-* 0.9
0.6299999999999999
ghci> (*-*) 5 3
16
ghci> :{
          let gcd a b | a > b     = gcd (a - b) b 
                      | b > a     = gcd a (b - a) 
                      | otherwise = a
      :}
ghci> :type gcd
gcd :: (Ord a, Num a) => a -> a -> a
ghci> gcd 3 6
3
ghci> gcd 12 11
1
ghci> 18 `gcd` 12
6

您可以使用中缀语法定义新的中缀运算符(仅符号).然后,您可以将它们用作中缀运算符,或将它们包含在parens中以将它们用作普通函数.

您还可以将常规函数(字母,数字,下划线和单引号)用作运算符,方法是将它们括在反引号中.

  • 对!使用`infixr`和`infixl`:http://www.zvon.org/other/haskell/Outputsyntax/fixityQdeclaration_reference.html (2认同)

Joe*_*oey 10

好吧,你可以用许多语言重新定义一组固定的运算符,比如C++C#.其他的,比如F#Scala,你甚至可以定义新的运算符(即使是中缀运算符),这些运算符甚至可能更好用于数学运算.


EFr*_*aim 9

也许哈斯克尔?允许您定义任意中缀运算符.


ska*_*man 8

Ted Neward写了一系列关于Scala的文章,针对Java开发人员,他通过演示如何在Scala中编写数学域语言(顺便提一下,这是一种静态类型的语言)来完成它.

第1部分

第2部分

第3部分