2011-10-18 23 views
21

Tính cố định của các toán tử backtick là gì?Tính cố định của các toán tử backtick?

Ví dụ trong mã này từ Real World Haskell:

ghci> (1+) `fmap` [1,2,3] ++ [4,5,6] 
[2,3,4,4,5,6] 

Đó là điều hiển nhiên các nhà điều hành backtick `fmap` có tính cố định cao hơn ++, nhưng none is given by GHCi.

+1

@ dabe4420 BTW, Lỗi này chỉ ảnh hưởng đến khai báo khắc phục trên các hàm được xác định trên REPL. So sánh một cái gì đó như ''f' \' elem \ '" abc "++" ijk "' đang hoạt động tốt. – fuz

Trả lời

21

§4.4.2 của the Haskell Report khẳng định rằng

Bất kỳ nhà điều hành thiếu một tuyên bố tính cố định được giả định là infixl 9

"Bất kỳ nhà điều hành" bao gồm tên hàm bình thường trong backticks.

Ví dụ của bạn cho thấy rằng `fmap` có độ cố định cao hơn ++, vì ++ hoạt động dựa trên kết quả của fmap.

+4

Điều đáng nói đến là bạn có thể chỉ định tính cố định cho các toán tử đó. Ví dụ: '1 + 2 \' const \ '5 = 3', nhưng' 1 + 2 \ 'div \' 5 = 1'. – Rotsor

+4

@Rotsor: Ví dụ của bạn không phải là một ví dụ vì giá trị của biểu thức '1 + 2 \' const \ '5' sẽ là 3 ngay cả khi độ cố của' \ 'const \' 'giống như của' \ 'div \ ''. –

+4

Ồ, làm thế nào tôi có thể? '2 \' div \ '1^2 = 2' và' 2 \ 'const \' 1^2 = 4' là các ví dụ sau đó. – Rotsor

Các vấn đề liên quan