DEVELOPER TRAINING

  • Trang chủ
  • Khóa học
  • Tutorials
    • React Native
  • Đăng ký
  • Tài liệu
    • Thường thức iPhone
    • Mạng xã hội , Social Network
    • Android, ios, Windows phone, Blackberry
    • CRM
    • ERP
    • Joomla, Wordpress, Drupal...
    • Codeigniter, Zend, Phalcon...
    • Magento, Prestashop, opencart ...
    • Tài liệu khác
  • Tuyển dụng
    • Tìm người cùng khởi nghiệp
    • Tuyển thực tập lập trình
  • Chuyển đổi số
    • Chuyển đổi số
    • Kinh tế số
    • Kinh tế chia sẻ
    • Fintech
    • Mạng xã hội
    • insurtech
    • Bất động sản 4.0

Tài liệu lập trình, tài liệu triển khai CRM, tài liệu triển khai ERP, tài liệu marketing

Tài liệu

Phương pháp suy luận trong lập trình hàm

  • Print

Trong quá trình tìm hiểu về Free Monad, khi đọc các paper tôi gặp một số vấn đề để hiểu về phương pháp chứng minh các giả thuyết. Tìm hiểu kỹ hơn là do bản thân tôi chưa hiểu rõ phương pháp suy luận trong lập trình hàm.

Phương pháp suy luận trong lập trình hàm

Bài viết này nhằm giới thiệu phương pháp thường dùng trong lập trình hàm: Phương pháp quy nạp (induction)

Phương pháp quy nạp nói lên rằng: nếu bạn muốn chứng minh một giả thuyết P, chúng ta sẽ chứng minh (1) P đúng với một trường hợp cơ sơ, (2) dựa vào giả thuyết quy nạp, chúng ta sẽ chứng minh nếu P đúng với trường N, thì P cũng đúng với trường hợp N’. Việc biến đổi từ N -> N’ sẽ là bao hàm toàn bộ tập các dữ liệu của chúng ta.

Ví dụ, xét trường hợp hàm reverse được định nghĩa như sau

1
2
3
4
5
 
reverse :: [ a ] -> [ a ]
reverse [ ] = [ ]                                                ( 1 )
reverse ( x : xs ) = reverse xs ++ [ x ]                              ( 2 )
 

Trong đó hàm ++ được định nghĩa như sau

1
2
3
4
5
 
++ :: [ a ] -> [ a ] -> [ a ]
[ ] ++ xs = xs                                        ( 3 )                         
( x : xs ) ++ ys = x : ( xs ++ ys )                          ( 4 )
 

Giờ, hãy chứng minh rằng reverse(reverse x) = x.

Trường hợp cơ sở là reverse(reverse []) = []

1
2
3
4
5
 
reverse ( reverse [ ] )
     = reverse [ ]                  # do (1)
     = [ ]                          # do (1)
 

Giờ, chúng ta giả sử dùng reverse(reverse xs) = xs (giả thiết quy nạp), chúng ta sẽ chứng minh

reverse(reverse x:xs) = x:xs (5) bằng cách sử dụng một bổ đề

1
2
3
 
reverse ( xs ++ ys ) = reverse ys ++ revese xs        ( 6 )
 

Việc chứng minh (6) sẽ được để lại sau, giờ giả sử rằng (6) đã được chứng minh, chúng sẽ sẽ chứng minh (5) như sau

1
2
3
4
5
6
7
8
 
reverse ( reverse x : xs )
   = reverse ( reverse xs ++ [ x ] )                  # do (2)
   = reverse ( [ x ] ) ++ reverse ( reverse xs )        # áp dụng giả thiết quy nạp
   = [ x ] ++ reverse ( reverse xs )                  # do định nghĩa hàm reverse([x])
   = [ x ] ++ xs                                  # do (4)
   = x : xs                                        # do (3)
 

Việc chứng minh bổ để (5) cũng được thực hiện bằng phương pháp quy nạp.

Trường hợp cơ sở reverse(xs ++ []) = reverse [] ++ reverse xs

1
2
3
4
5
6
 
reverse ( xs ++ [ ] )
   = reverse xs
   = [ ] ++ reverse xs
   = reverse [ ] ++ reverse xs
 

Giờ, gỉa sử rằng reverse(xs ++ ys) = reverse ys + reverse xs, ta sẽ chứng minh

reverse(xs ++ (y:ys)) = reverse (y:ys) + reverse xs

1
2
3
4
5
6
7
8
 
reverse ( xs ++ y : ys ) )
   = reverse ( ( xs ++ [ y ] ) ++ ys )                  # việc chứng minh điều này coi như là bài tập cho bạn đọc                                  
   = reverse ys + reverse ( xs ++ [ y ] )            # do giả thiết quy nạp
   = reverse ys ++ reverse [ y ] ++ reverse xs      # do giả thiết quy nạp
   = reverse ( [ y ] ++ ys ) ++ reverse xs            # do giả thiết quy nạp
   = reverse ( y : ys ) + reverse xs                      # do 4
 

Phương pháp quy nạp giúp tôi nhận ra một điều, bản chất của lập trình hàm (functional programming) là toán học. Nghĩa của từ hàm trong lập trình hàm chính là hàm toán học. Chính vì thế, lập trình hàm vừa dễ vừa khó. Dễ theo nghĩa nếu chúng ta hiểu được bản chất toán học của hàm, việc viết code sẽ trở nên rất ngắn gọn và chính xác. Tuy nhiên khó ở chỗ, để viết các hàm chúng ta cần nắm rõ được nền tảng toán học đằng sau đó.

Kipalog

Có thể bạn quan tâm:

Hướng dẫn lập trình nhận dạng hình ảnh với Opencv

Sách hướng dẫn lập trình game trên Android, Beginning Android 4 ...

Dùng Eclipse lập trình J2ME

Hướng dẫn lập trình smart TV SamSung

Tài liệu về lập trình html5

Thực tập lập trình C++ và Objective-C

Developer (Lập trình viên)

Lập Trình iOS

Lập trình website

Tài liệu lập trình mạng xã hội với Open Social

Nhân viên lập trình Android và iOS

Lập Trình Viên PHP

Nhân viên lập trình game mobile

Nhân viên lập trình website asp.net

IoT là gì? ứng dụng của IoT trong cuộc sống hiện đại

Lập trình: cũng chỉ là viết?

Thực tập lập trình java

Tài liệu về lập trình html5

Lập trình viên và chuyện học ngoại ngữ

 

Có thể bạn chưa biết:

TUYỂN THỰC TẬP REACT NATIVE

* Trang bị kỹ năng về JS, lập trình hybrid app, sử dụng những công cụ hỗ trợ (VScode, github, sourcetree, ...)
* Thành quả mong muốn là các bạn tham gia sẽ có được kỹ năng lập trình hybrid app

Biểu mẫu đăng ký training tại đây >> http://bit.ly/2NK9YWd

TEAM MOBILE APPS - CTY DVMS

  • Prev
  • Next
  • tweet

Nhiều người quan tâm

  • Mã nguồn mạng xã hội giống y Facebook
  • Tìm co-founder cho các dự án khởi nghiệp
  • Phương pháp giải quyết phản bác
  • Gần 700 forum, trang rao vặt giúp tăng độ phủ quảng cáo, SEO, Backlink
  • Danh sách 6.500 website mua bán rao vặt, tốt để quảng cáo, SEO và tạo backlink
  • Top 10 nguồn học JavaScript trực tuyến tốt nhất

Tin mới

5 lý do sở hữu một ứng dụng di động là cần thiết đối với doanh nghiệp vừa và nhỏ 19 June 2018
Blockchain thực sự hoạt động như thế nào? 09 January 2019
Những ứng dụng bất ngờ của công nghệ Nhận diện khuôn mặt mà không phải ai cũng biết 17 July 2018
3 Ngộ nhận lớn nhất của người mới học lập trình 09 January 2019
3 câu lệnh hữu ích trong Javascript mà bạn nên biết 09 January 2019
4 năm nữa, 80% người Việt Nam sẽ dùng điện thoại di động 07 June 2016

Blogs

  • Kiểm soát đường huyết bằng smartphone và tablet
  • ứng dụng nghe nhạc trên Blackberry
  • Khám phá những điều bí ẩn của vũ trụ
  • Happy Life - Cuộc sống mạnh khỏe và hạnh phúc hơn
  • Mẫu văn bản cho công ty gia công phần mềm, phát triển mobile apps
  • Mời sinh nhật, đám cưới... nhanh và dễ dàng

Lập trình ứng dụng di động

  • Lập trình Android
  • Lập trình iOS
  • Lập trình Windows Phone
  • Lập trình BlackBerry OS
  • Lập trình BlackBerry 10
  • Lập trình J2ME
  • Lập trình game mobile
  • Đồ họa cho ứng dụng
  • Lập trình Phonegap
  • Lập trình Unity 3D
  • Lập trình Xamarin
  • Lập trình web mobile
  • Lập trình Node js

Học lập trình

  • Lập trình .NET
  • Lập trình C/C++
  • Visual C++
  • Visual C#
  • Lập trình Visual Basic
  • Visual Basic .NET
  • Lập trình Java
  • Lập trình trên Linux
  • Công cụ, ebooks .NET
  • Dự án lập trình .NET
  • Hỏi đáp về lập trình
  • Hướng dẫn cho người mới
  • Thủ thuật
  • Hỏi đáp tin học

Lập trình web

  • Lập trình PHP
  • Flash và các vấn đề
  • Thiết kế web
  • Lập trình web JSP
  • Lập trình web ASP
  • Lập trình web ASP.NET
  • HTML - CSS
  • Webmaster/ SEO
  • JavaScript / Ajax, jQuery
  • Lập trình Phalcon

Cơ sở dữ liệu

  • MS SQL Server
  • MySQL
  • Oracle
  • Các hệ CSDL khác
  • Bigdata
  • Blockchain

OpenSource Master

  • Lập trình và quản trị Joomla
  • Lập trình và quản trị Wordpress
  • Lập trình và quản trị Drupal
  • Lập trình và quản trị SugarCRM
  • Lập trình và quản trị VTigerCRM
  • Lập trình và quản trị Open ERP
  • Lập trình và quản trị Dolibarr ERP

 

Copyright © Tạo Ứng Dụng, All Rights Reserved. Developed By DVMS | All solution for smartphone & tablet.. Designed By JoomShaper

Tìm kiếm

  • Trang chủ
  • Khóa học
  • Tutorials
    • React Native
  • Đăng ký
  • Tài liệu
    • Thường thức iPhone
    • Mạng xã hội , Social Network
    • Android, ios, Windows phone, Blackberry
    • CRM
    • ERP
    • Joomla, Wordpress, Drupal...
    • Codeigniter, Zend, Phalcon...
    • Magento, Prestashop, opencart ...
    • Tài liệu khác
  • Tuyển dụng
    • Tìm người cùng khởi nghiệp
    • Tuyển thực tập lập trình
  • Chuyển đổi số
    • Chuyển đổi số
    • Kinh tế số
    • Kinh tế chia sẻ
    • Fintech
    • Mạng xã hội
    • insurtech
    • Bất động sản 4.0