Nó phụ thuộc vào chính xác ý bạn là "bình đẳng của biểu thức hàm".
Các chức năng này sẽ kết thúc dưới dạng mã byte, vì vậy tôi có thể ví dụ đổ bytecode tương ứng với từng hàm thành một byte [] và sau đó so sánh hai mảng bytecode.
Tuy nhiên, có nhiều cách khác nhau để viết các phương thức tương đương ngữ nghĩa, sẽ không có cùng biểu diễn trong bytecode.
Nói chung, không thể nói được một đoạn mã nào không hoạt động. Vì vậy, nó không thể nói cho dù hai bit mã tương đương mà không cần chạy cả hai mã, trên tất cả các đầu vào có thể.
Điều này ít nhất là xấu, tính toán, là sự cố tạm dừng và có thể tệ hơn.
Sự cố tạm dừng là không thể giải quyết được, vì vậy câu trả lời chung ở đây chắc chắn là không (và không chỉ cho Clojure mà là cho mọi ngôn ngữ lập trình).
Không thể - tương đương với các chức năng là không thể xác định. –
Rất tiếc, xin lỗi về định dạng nhận xét tiền thưởng - đã không nhận ra định dạng sẽ không hoạt động theo cùng một cách. –
Xin chào Omri. Nếu bạn nhìn thấy câu trả lời của tôi dưới đây, bạn sẽ thấy rằng tôi nói về hai hàm có cùng bytecode JVM làm cơ thể của chúng. Đó là sự bình đẳng về mặt hiệu quả. Tôi cũng làm cho điểm rằng bình đẳng gia tăng hàm ý sự bình đẳng mở rộng (nhưng ngược lại là không đúng). Nếu bytecode kết thúc là khác nhau (vì nó có thể cho một số ví dụ mà bạn đưa ra), thì chúng ta quay trở lại cố gắng để đạt được bình đẳng mở rộng - mà như chúng ta biết là không thể xác định được.Hy vọng rằng làm cho mọi thứ một chút rõ ràng hơn - bình đẳng (cộng với một số trường hợp đặc biệt) có lẽ là tốt nhất chúng ta có thể hy vọng. – kittylyst