Trong C#, không có khái niệm trong xây dựng của tính giao hoán bằng ngôn ngữ. Đó là nếu tôi định nghĩa một lớp đơn giản Vector
ví dụ:Tính tương đối trong các toán tử
public struct Vector
{
private readonly double x, y, z;
...
public static Vector operator +(Vector v, double d) {...}
}
tôi vẫn sẽ cần phải xác định người điều khiển đối xứng +(double d, Vector v)
hoặc bất kỳ biểu hiện của hình thức 2.1 * v
sẽ đưa ra một lỗi biên soạn hoặc thất bại khi chạy trong một kịch bản năng động.
Câu hỏi của tôi là hai lần: Thứ nhất, có bất kỳ ngôn ngữ nào ở đó, nơi bạn có thể xác định toán tử giao hoán mà không cần phải xác định cả hai kết hợp toán hạng có thể? Nói cách khác, liệu có bất kỳ ngôn ngữ nào nhận thức được khái niệm về commutativity không? Và thứ hai, nó đã từng được xem xét trong C# và bị loại bỏ vì nó thực sự chỉ là cú pháp cú pháp để tránh một vài thao tác gõ khác mà không thực sự thêm tất cả sự phong phú cho ngôn ngữ (và có lẽ sẽ cần thêm một từ dành riêng)?
Xác định tính tương giao bằng một dòng: 'toán tử tĩnh Vector công khai + (double d, Vector v) {return v + d;}' –
Tôi tin rằng Haskell hỗ trợ điều này ngay lập tức. Điều đó và Prolog. Đã gần 8 năm mặc dù tôi có thể sai. – Haney
Kiểm tra câu hỏi này (và câu trả lời) http://stackoverflow.com/questions/7385937/why-must-i-define-a-commutative-operator-twice –