Tôi mới bắt đầu học Haskell. Tôi đang cố gắng tìm một x trong danh sách mà score x
có giá trị tối đa. Tôi đã thử snd (maximum [(score x, x) | x <- codes])
hoạt động, nhưng tôi đã tự hỏi liệu có cách nào nhanh hơn để thực hiện điều này, mà không thực sự lưu trữ cả hàm và giá trị.Haskell: x trong danh sách mà f (x) là tối đa
Cảm ơn mọi đề xuất!
Đừng lo lắng về điểm số được "lưu trữ" - cách thức hoạt động của Haskell và GHC, chúng sẽ không hoạt động. Ví dụ, chương trình biên dịch 'main = print (tối đa [(2 * x, x) | x <- [1..100000000000] :: [Int]])' có thể mất khoảng 10-15 phút để chạy nhưng sẽ làm do đó, trong bộ nhớ nhỏ, liên tục, vì trình biên dịch sẽ xác định rằng cả các mã cũng như điểm số cần phải được giữ lại để có được câu trả lời. –
Lưu ý rằng nếu bất kỳ mã nào có cùng số điểm, điều này sẽ chọn giữa chúng bằng cách chọn mã tối đa, tuy nhiên 'Ord' được xác định cho loại đó. Điều này có thể hoặc không thể là những gì bạn muốn. – Carl
'snd. maximumBy (so sánh fst). map (score &&& id) 'cũng hoạt động cho các kiểu không phải' '' '' –