Là một newbie để Haskell Tôi không thể hiểu tại sao các biểu head . words “one two three four”
ném một thành phần ngoại lệ và chức năng head . words
phải được áp dụng với $
điều hành - sự biểu hiện ở bên phải của nó không cần đánh giá thêm vì nó chỉ là một đơn String
. Cách khác để biên dịch nó là đặt head . words
trong dấu ngoặc đơn nhưng (head . words) :: String -> String
có cùng loại với head . words :: String -> String
vậy tại sao đặt nó trong dấu ngoặc đơn làm cho biểu thức biên dịch?Áp dụng đối số thực hiện chức năng thành phần trong Haskell
6
A
Trả lời
11
Vì các quy tắc ưu tiên. Ứng dụng có quyền ưu tiên cao nhất; $
- thấp nhất.
head . words “one two three four”
được phân tích cú pháp là head . (words “one two three four”)
tức là words
được áp dụng trên chuỗi phải tạo hàm (theo yêu cầu của (.)
). Nhưng đó không phải là loại mà words
có:
Prelude> :t words
words :: String -> [String]
head . words $ “one two three four”
mặt khác, được phân tách như (head . words) “one two three four”
và các loại phù hợp.
Các vấn đề liên quan
- 1. Haskell: Sử dụng bản đồ trong thành phần chức năng
- 2. Haskell chức năng thành phần câu hỏi
- 3. Cách chức năng thư viện trong Haskell được thực hiện
- 4. Chức năng nào áp dụng đối số của chính nó?
- 5. Thực hiện quá tải chức năng trong Haskell
- 6. độ lười và thành phần chức năng (haskell, erlang)
- 7. Haskell: suy luận kiểu và chức năng thành phần
- 8. nếp gấp. thành phần chức năng foldr - Haskell
- 9. Chức năng trong Haskell
- 10. Quy tắc viết lại Haskell và thành phần chức năng
- 11. quá ít đối số thực hiện chức năng 'memcpy'
- 12. Ứng dụng Chức năng Haskell
- 13. Thành phần chức năng
- 14. áp dụng Scala một phần chức năng cà ri
- 15. Chức năng thực hiện số nguyên ở đâu đó trong thư viện Haskell?
- 16. 'seq` về chức năng áp dụng một phần
- 17. Giữ chức năng được áp dụng một phần chung
- 18. Ứng dụng chức năng Haskell và currying
- 19. Áp dụng nhiều chức năng cho cùng một kiểu điểm không có giá trị trong Haskell
- 20. Thành phần chức năng với hàm đa giá trị trong haskell?
- 21. Chức năng $ thực sự làm gì trong haskell?
- 22. Thực hiện chức năng cuối cùng
- 23. Haskell Monad Chức năng
- 24. đối số chức năng
- 25. Thực hiện các chức năng song song
- 26. Truy cập hàng/cột trong chức năng 'áp dụng'
- 27. thực hiện chức năng SIP trong IOS5
- 28. Thực hiện chức năng Traceroute trong android
- 29. Áp dụng chức năng trên Pandas dataframe
- 30. Làm thế nào để bạn thực hiện một chức năng ghi nhớ chung trong Haskell?
Cảm ơn câu trả lời, có một chút khó khăn khi tôi hiểu rằng toán tử thành phần chính là một hàm. –
@wojtek ah, vâng, '(.) :: (b -> c) -> (a -> b) -> a -> c'. Đừng quên, các mũi tên trong chữ ký kiểu liên kết bên phải. Nó thực sự là '(.) :: (b -> c) -> (a -> b) -> (a -> c)'. Hãy tưởng tượng bạn đã có hai đường ống này, 'g :: b-> c' và' h :: a-> b'. Vì vậy, rõ ràng, đầu ra 'b' đi vào đầu vào' b': '(g.h) x = g (h x)' tức là '(g.h) :: a-> c'. –
@wojtek Mỗi toán tử đều là một hàm và có mức ưu tiên thấp hơn ứng dụng hàm. Đây là thứ mà một lập trình viên Haskell hoàn toàn phải lưu ý. – Ingo