Tôi nhầm lẫn về các quy tắc dành cho ưu tiên toán tử trong Haskell.
Cụ thể hơn, tại sao lại như vậy:quyền ưu tiên của nhà điều hành trong Haskell
*Main> 2 * 3 `mod` 2
0
khác với điều này?
*Main> 2 * mod 3 2
2
Tôi nhầm lẫn về các quy tắc dành cho ưu tiên toán tử trong Haskell.
Cụ thể hơn, tại sao lại như vậy:quyền ưu tiên của nhà điều hành trong Haskell
*Main> 2 * 3 `mod` 2
0
khác với điều này?
*Main> 2 * mod 3 2
2
cuộc gọi Chức năng ràng buộc chặt chẽ, và do đó
2 * mod 3 2
cũng giống như
2 * (mod 3 2)
Hãy ghi nhớ rằng mod
không được sử dụng như một nhà điều hành ở đây vì không có backticks.
Bây giờ, khi mod
được sử dụng ở dạng infix, nó có mức ưu tiên là 7, trong đó (*)
cũng có. Vì chúng có cùng một quyền ưu tiên và liên kết bên trái, chúng đơn giản được phân tích cú pháp từ trái sang phải:
(2 * 3) `mod` 2
cảm ơn bạn đã giải thích :) –
2 * 3 = 6 và sau đó mod 2
= 3 với không gian còn lại ... để 6 mod 2 = 0
là câu trả lời của bạn ở đó. Trong trường hợp thứ hai của bạn, bạn đang thực hiện 2 * kết quả là mod 3 2
là 2 * 1 = 2
. Do đó câu trả lời của bạn là 2
.... Quyền ưu tiên của nhà điều hành vẫn giữ nguyên, bạn chỉ cần sắp xếp nó để các câu trả lời được thể hiện tương ứng.
cảm ơn bạn đã trả lời! –
xem thêm [prelude operator precedences] (http://stackoverflow.com/a/30288988/3041008) – mucaho