|
7
|
| niklasfi Rahul Tripathi · 技术社区 · 17 年前 |
|
|
1
19
Like EFraim said ,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
可以使用中缀语法定义新的中缀运算符(仅限符号)。然后您可以使用 将它们作为中缀运算符使用,或将它们括在paren中以将其用作正规函数。
|
|
|
2
10
|
|
|
3
9
|
|
|
4
8
|
|
|
5
3
在C++中,您可以定义在其他类上工作的操作符,但我不认为像Int这样的其他基本类型,因为它们不能有实例方法。您可以在C++中创建自己的数字类,并重新定义所有运算符,包括+*等。 要在原语类型上创建新的运算符,您必须求助于函数式编程(从其他答案看来)。这很好,只要记住函数式编程与面向对象编程非常不同。但这将是一个巨大的新挑战,函数式编程对数学来说非常重要,因为它来自lambda calc。学习函数式编程将教给你不同的技能,并对你的数学和编程有很大帮助D
|
|
|
6
2
Eiffel允许您定义新的运算符。 |
|
|
7
2
由于在Lisp组合中应用于参数的过程被称为运算符,那么是的,您可以定义新的运算符,直到奶牛回家。 |
|
|
8
2
不幸的是,您无法创建自己的新运算符,似乎只能覆盖现有运算符。
不得不说,Ada不是一种非常流行的语言,但就强大的打字能力而言,你不可能变得更强大。
另一种尚未提及的语言是 D . 它也是一种强类型语言,支持 operator overloading . 同样,它不支持用户定义的中缀运算符。 从 http://www.digitalmars.com/d/1.0/rationale.html
|
|
|
9
2
ocaml和 f# ocaml discussion ). |
|
|
10
1
我认为您可能应该深入思考为什么要使用此功能。在我看来,在选择一门语言时,有很多更重要的考虑因素。
在这个上下文中,我只能想到单词“operator”的一个可能的含义,它只是函数调用的语法糖,例如。
这有时很有用,但并不经常。我能想到很少有我重载/定义运算符的实例。 如其他答案所述,Haskell确实允许您定义新的中缀运算符。然而,一个纯粹的函数式语言加上懒惰的计算可能会有点吃力。如果您想第一次尝试函数式语言,我可能会推荐SML而不是Haskell。类型系统稍微简单一点,可以使用副作用,而且不懒惰。 units of measure ,这是该语言所独有的。如果您需要该功能,它将是无价的。 我脑子里想不出任何带有中缀运算符的静态类型命令式语言,但你可能想在数学编程中使用函数式语言,因为证明函数式程序的事实要容易得多。 如果中缀运算符等语法问题对您非常重要,您可能还希望创建一个小型DSL。然后你可以用你想要的任何语言编写程序,并且仍然可以用一种方便的方式指定数学。 |
|
|
11
1
你说的强打字是什么意思?您指的是静态类型(所有内容都有一个在编译时已知的类型,并且转换受到限制)还是强类型(所有内容都有一个在运行时已知的类型,并且转换受到限制)?
|
|
|
12
1
|
|
|
13
0
实际上,通过运算符重载,您可以使用C#执行所需的操作。
|
|
|
Muhammad Umer · 为什么这个随机数猜谜游戏模拟产生5.8 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
D W · Python-将浮点数从2转换为10到100位小数 1 年前 |
|
|
Bartol · 确定python龟图形中的角度 2 年前 |
|
|
randomAlgo · 将弹簧设置为相同长度的成本最低 2 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 2 年前 |
|
Sergio · python中大量数字的乘法 2 年前 |