Tôi đã chơi đùa với Haskell một chút công bằng, bao gồm thực hành các chức năng viết theo dạng không có điểm. Dưới đây là một ví dụ về chức năng:Tại sao phiên bản pointfree của chức năng này trông như thế này?
dotProduct :: (Num a) => [a] -> [a] -> a
dotProduct xs ys = sum (zipWith (*) xs ys)
Tôi muốn viết hàm này ở dạng không có điểm. Dưới đây là một ví dụ tôi tìm thấy ở nơi khác:
dotProduct = (sum .) . zipWith (*)
Tuy nhiên, tôi không hiểu tại sao các hình thức điểm-miễn phí trông giống như (sum .) . zipWith (*)
thay vì sum . zipWith (*)
. Tại sao tổng trong ngoặc đơn và có 2 toán tử thành phần?
Có phải '*' trong phần này 'f * g == (f *) g' giống với thành phần hàm' .' không? – guhou
@Bleu: Có. Bất kỳ toán tử nhị phân nào cũng sẽ thực hiện. – kennytm