Tôi có một chức năng trông như sau:Hiệu suất cà ri F #?
let isInSet setElems normalize p =
normalize p |> (Set.ofList setElems).Contains
Chức năng này có thể được sử dụng để nhanh chóng kiểm tra xem một yếu tố là một phần ngữ nghĩa của một số bộ; ví dụ, để kiểm tra xem một đường dẫn tập tin thuộc về một tập tin html:
let getLowerExtension p = (Path.GetExtension p).ToLowerInvariant()
let isHtmlPath = isInSet [".htm"; ".html"; ".xhtml"] getLowerExtension
Tuy nhiên, khi tôi sử dụng một chức năng như, hiệu suất trên là nghèo từ đánh giá của cơ quan chức năng như được viết trong "isInSet" dường như bị trì hoãn cho đến khi tất cả các tham số được biết - đặc biệt, các bit bất biến như (Set.ofList setElems).Contains
được đánh giá lại mỗi lần thực hiện isHtmlPath
.
Làm cách nào tốt nhất tôi có thể duy trì sự kém phát triển của F #, bản chất có thể đọc được trong khi vẫn nhận được hành vi hiệu quả hơn trong đó việc xây dựng bộ được đánh giá trước.
Ở trên là chỉ là một ví dụ; Tôi đang tìm cách tiếp cận chung để tránh làm tôi thất vọng trong chi tiết triển khai - nếu có thể Tôi muốn tránh bị phân tâm bởi các chi tiết như lệnh thi hành vì điều đó thường không quan trọng đối với tôi và loại phá hoại điểm bán hàng của lập trình chức năng.
Bạn có liên kết nào bạn muốn đọc về biểu thức tính toán không? Tôi có ý tưởng nhưng không nắm bắt được chi tiết ... –
@Eamon: Tôi đã thêm hai liên kết vào cuối câu trả lời của tôi. –
Cảm ơn ví dụ tuyệt vời và cách sử dụng các biểu thức tính toán hơi tâm trí! Điều này cuối cùng đã thuyết phục tôi nhìn kỹ hơn - ngay cả khi tôi không chắc họ thực sự cần ở đây. –