W języku C# nie ma wbudowanego pojęcia komutatywności w języku. To jest, jeśli mogę zdefiniować prostą Vector
klasę na przykład:Komutacja w operatorach
public struct Vector
{
private readonly double x, y, z;
...
public static Vector operator +(Vector v, double d) {...}
}
będę nadal trzeba zdefiniować operator symetryczny +(double d, Vector v)
ani żadnej ekspresji postaci 2.1 * v
daje błąd kompilacji lub nie w czasie wykonywania w dynamicznej scenariusza.
Moje pytanie jest dwojakie: Po pierwsze, czy są jakieś języki, w których można zdefiniować operatorów przemiennych bez potrzeby definiowania obu możliwych kombinacji operandów? Innymi słowy, czy istnieją języki znające samą koncepcję komutacji? Po drugie, czy kiedykolwiek rozważano to w języku C# i złomowano, ponieważ jest to po prostu syntaktyczny cukier, aby uniknąć kilku dodatkowych naciśnięć klawiszy, które tak naprawdę nie dodają tak dużo bogactwa do języka (i najprawdopodobniej potrzebowaliby dodatkowego zarezerwowanego słowa)?
Definiowanie komutatywności za pomocą jednej linii: 'public static Operator wektorowy + (double d, Vector v) {return v + d;}' –
Wierzę, że Haskell natychmiast to potwierdza. To i Prolog. Minęło już prawie 8 lat, więc mogę się mylić. – Haney
Sprawdź to pytanie (i odpowiedzi) http://stackoverflow.com/questions/7385937/why-must-i-define-a-commative -operator-twice –