Skip to main content

Posts

Showing posts with the label Functional Programming

Học Elixir trong một giấc mơ

Lý do bạn thích học Haskell, LISP, Erlang, Elixir, Ocaml, Scala... những ngôn ngữ lập trình hàm (functional programming language) có vẻ hay ho, mà không bao giờ thành công là gì? Sau đây là vài lý do mình gặp phải: - Quá nhiều khái niệm mới - Nhồi nhét hết các khái niệm xong không có gì để làm - Chọn ngôn ngữ "xịn" nhất: trong mảnh đất functional programming, rất nhiều cái tên hấp dẫn khác như Haskell, Ocaml, Racket, Scheme, CLisp, Scala,... Để khắc phục điều này, ta sẽ: - Chỉ tập trung vào những khái niệm đã quen thuộc, học thật nhanh, tra cứu khi cần - Có một ý tưởng để thực hiện - Tập trung vào Elixir vì mỗi ngôn ngữ đều có điểm mạnh/ yếu riêng, nhưng khi nắm được một ngôn ngữ, học các ngôn ngữ khác sẽ trở nên dễ dàng hơn nhiều do đã quen thuộc các khái  niệm và lối tư duy của functional programming. Nếu không có gì để làm, nuốt xong các khái niệm, 1 tuần sau bạn sẽ lại quên. Elixir/Erlang hoàn toàn đủ khả năng để cho bạn lập trình loanh quanh mấ...

[Python] function là object

Nếu có coi function là một cái gì đó đặc biệt, khác biệt với mọi thứ còn lại trong Python thì có thể bạn đã sai, hay ít nhất cũng cần nghĩ lại sau khi xem các đặc điểm của function trong bài này. Python lambda Function là object, như mọi thứ khác trong Python. Integer là object, string là object, và function không phải ngoại lệ. $ python3 >>> type(5) <class 'int'> >>> type('http://pymi.vn') <class 'str'> >>> type(True) <class 'bool'> >>> type(len) <class 'builtin_function_or_method'> Nếu biết về lambda trong Python, bạn sẽ thấy rõ hơn function là cái gì: >>> double = lambda x: x*2 >>> type(double) <class 'function'> >>> double(21) 42 lambda tạo ra 1 object kiểu function (tưởng tượng ra 1 cục tròn tròn), sau đó ta gán (bind) tên ``double`` cho object đó. Nó tương tự như việc gán tên cho 1 string: >>> name = ...

Hello, Rust!

Mình thích thì mình học thôi. Tài liệu: "The Book”,The Rust Programming Language  Update : tài liệu dễ đọc hơn: http://rust-lang.github.io/book/ Rust thuộc loại ngôn ngữ nào? Rust là một sản phẩm xuất phát từ Mozilla - tổ chức đứng sau Firefox thần thánh. Rust is a systems programming language focused on three goals: safety , speed , and concurrency . Vậy đừng lôi Rust ra làm web rồi chê này kia. Những lĩnh vực mà Rust quảng cáo là phù hợp: embedding in other languages programs with specific space and time requirements and writing low-level code like device drivers and operating systems. Vậy Rust có thể mang ra code những thứ người ta code bằng C hay C++. Cài đăt: https://www.rust-lang.org/en-US/downloads.html Kiểm tra version: $ rustc --version rustc 1.12.1 (d4f39402a 2016-10-19) Những người code Rust được gọi là : Rustaceans File code Rust có đuôi ".rs". Tên dùng dấu ``_`` để phân cách giữa các từ, như hello_world.rs  $ cat main.rs fn ...

[Ebook] Sách học Lua

Lua là tên một ngôn ngữ lập trình. Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping. Cuốn sách Programming in Lua được liệt kê ngay trong phần document tại trang chủ của Lua và là một cuốn sách hay, kể cả cho những người không học Lua và nó free online: http://www.lua.org/pil/contents.html#P1 Ví dụ về sự hay: giải thích về tail call và tail recursion http://www.lua.org/pil/6.3.html

[Python] lambda

Bài viết giới thiệu vài ví dụ về việc tạo anonymous function sử dụng lambda trong Python. Cú pháp: lambda arguments: expression Trả về 1 function object Nó thường dùng để định nghĩa các hàm đơn giản (trong 1 dòng) , là một khái niệm đi mượn từ các ngôn ngữ lập trình hàm . Nếu sử dụng lambda , dù chỉ 1 lần thử, người dùng sẽ có những cảm giác vô cùng mới lạ, sảng khoái với nó. Bài viết khác sẽ đi sâu vào giải thích khái niệm lambda, bài này chơi đã : .. note: toàn bộ ví dụ trong bài này được code trực tiếp trên ipython trên python2.7 nhưng vẫn chạy được trên python3.x :

[Programming] Closure

Closure /ˈkləʊʒə/ sự đóng kín (Việt sub: cờ lâu giơ) Là một khái niệm phổ biến ở các ngôn ngữ lập trình hàm ( functional programming language như LISP, Scheme, ...) nhưng cũng có thể thấy ở Javascript,Ruby, Go, Object C, hay hỗ trợ 1 phần ở python2 và hỗ trợ hoàn toàn ở python3... (nhưng không có trong C, Java). Các ngôn ngữ nào cho phép trả về giá trị là một function thì có thể sẽ hỗ trợ closure. Để tránh sử dụng wikipedia, sau đây là các định nghĩa closure từ document chính thức của một số ngôn ngữ lập trình: Go đưa ra khái niệm ở dạng mô tả như sau trong gotour : Một closure là một function (hàm) mà reference (tham chiếu) đến các biến ở ngoài body của nó. Function này có thể truy cập và thay đổi các biến mà nó đã reference. Có thể nói function "bound"(đã gắn) đến các biến. EMACS LISP : Một closure là function mà nó "mang theo" một bản ghi về "môi trường lexical" đã tồn tại khi hàm đó được định nghĩa. Javascript : Closure là function...

[Haskell] Haskeller, not hacker

Haskell / ˈ h æ s k əl / haskeller là từ chỉ những người dùng ngôn ngữ Haskell hacker /ˈhakə/ Cho thêm từ hacker và để mọi người nhớ cách đọc của haskell Haskell là gì? Định nghĩa copy nguyên văn từ homepage haskell.org Haskell is a computer programming language. In particular, it is a polymorphically statically typed , lazy , purely functional language, quite different from most other programming languages. The language is named for Haskell Brooks Curry , whose work in mathematical logic serves as a foundation for functional languages. Haskell is based on the lambda calculus , hence the lambda we use as a logo. Như những gì họ chọn, 4 đặc tính nổi bật của Haskell gồm: Polymorphically Statically typed Lazy Purely functional

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG