Functional Programming Patterns
TIL
748
Functional Programming
14
White

checkraiser viết ngày 27/06/2018

Functional Programming Patterns

  • Adding a function parameter (Parameterization)
  • Passing a function parameter (Currying)
  • Applying a function ( $ )
  • Composing a function: applies a succession of transformations to supplied data ((.))
  • Folding: reduces a sequence of values to a single value by combining adjacent pairs (foldr1)
  • Mapping: applies the same transformation to each value in a sequence (fmap)
  • Iteration: applies the same transformation repeatedly to its own delivered values, building a sequence of successively more refined iterates (iterate)
iterate f x = [d0, d1, d2,..]
    where [d0, d1, d2,...] = [x, f x, (f . f) x, ...]
  • Zipping: delivers a sequence whose length matches that of the shorter of the sequences supplied as its last two arguments. Zipping stops when one of those arguments runs out of elements.
zipWith op [x1, x2, x3, ..] [y1, y2 , y3 , ...] =
    [op x1 y1, op x2 y2 , op x3 y3 , ... ]

Example:

fibs :: [Int]
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
  • Filtering: selecting certain elements from a given sequence to form a new one.
-- Filter as Folding:

filter keep = foldr op []
    where 
    op x ys 
        | keep x = [x] ++ ys
        | otherwise = ys 

Note: When you are trying to describe a computation that involves repetition, try to view it as one of common patterns: mapping, folding, filtering, iteration, and zipping. The operators map, foldr, filter, iterate, and zipWith make up a kind of linguistic shorthand that covers probably over 90% of the computations involving repetition that you will encounter in practice.


  • Polymorphic: operate on many different types of arguments (reverse)
  • Type Class: collection of types that share a collection of functions and/or operations (Eq), for example, with Eq class, it made comparision possible.
  • Higher order function: Functions that have an argument that is, itself, a function are called higher-order functions. Functions that deliver a value that is, itself, a function are also called higher-order functions. The composition operator is a higher-order function that does both.
  • Encapsulation: Isolating components of software so that modifying internal details in one com- ponent will have no affect on other components of the software (where)

checkraiser 23-06-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

checkraiser

17 bài viết.
22 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
6 1
Tôi dự sẽ viết 1 loạt series về việc thiết kế 1 ứng dụng Rails như thế nào để nó có thể giúp bạn ăn ngon ngủ yên trong hằng năm trời: Khi mà việc t...
checkraiser viết hơn 4 năm trước
6 1
White
6 10
Cũng ngót nghét đi làm hơn 6 năm rồi, mình chỉ thấy một điều khá "ngược đời": Các ông chủ , những người trả tiền cho bạn lại có tư duy lập trình ké...
checkraiser viết hơn 2 năm trước
6 10
White
5 0
Bài viết này, là 1 quan điểm cá nhân trong việc viết Code các layer trong Rails của mình. Controller Trước khi code, bạn hãy đặt câu hỏi: Mục đí...
checkraiser viết hơn 3 năm trước
5 0
Bài viết liên quan
White
40 8
Có lẽ một số bạn sẽ có thắc mắc như tiêu đề khi mới tìm hiểu về Rust. Hẳn là các bạn đã biết, hoặc nghe đâu đó là: Trong Rust không có NULL. Bài vi...
Huy Trần viết 3 năm trước
40 8
White
4 0
(Ảnh) Kể từ phiên bản React 16.8 đã tung ra (Link), một cách tiếp cận mới để quản lí state và side effect hiệu quả hơn. Tư tưởng của React Hooks đ...
Huỳnh Minh Tú viết 4 tháng trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
17 bài viết.
22 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!