https://www.safaribooksonline.com/library/view/from-data-science/9781491998205/

# Category Archives: IT

# Kotlin Monad

1**. Monad Stack**

2. **Monad Transformer**

3. **Reader Monad**

# Lambda Calculus – The Math Behind Functional Programming

Functional Programming (FP) Languages : Lisp, Haskell, Scala, Kotlin, etc.

Other non-FP influenced by Lambda Calculus: Python, Ruby, Javascript, Java 8, C++

Inventor of Lambda Calculus : Alonzo Church (1903 – 1995), whose student in Princeton University (1936-1938) was Alan Turing (The Father of **Artificial Intelligence**).

Lambda Calculus is not : another Differential Calculus !

**Note**: Calculus has a meaning of manipulating symbolic expressions : either in functions (differentiation, integration) or computations.

Lambda Calculus is almost programming!

**I. Syntax of Lambda Calculus**:

eg.

Notice: it has only one parameter “x”.

- Function definition:
- Identifier reference:
- Function application:

**II. ****Currying 柯里化 :** (named after Haskell Curry ) for ** multiple** parameters.

eg.

written by “**Currying**” as :

Syntactic Sugar语法糖 : a notational shorthand. Eg. “cubic”

cubic = λ x . x * x * x

**III. Binding**: Every parameter (aka variable) must be declared (*syntactically binding*).

eg.

here, x is **bound, **but z is **FREE** (error!)

**IV. Two Execution Methods: **

1.

- rename variables to avoid conflict

2.

**Eager**evaluation strategy : Right to Left (innermost expression first to outermost) or**Lazy**evaluation strategy : Left to Right (outermost expression first to innermost) – don’t compute the value of an expression until you need to – (*save memory space and computing time*)- Most
**FP**are.**Lazy** - Most
**Procedural**(**Imperative**) languages (C, Fortran, Basic, …) are.**Eager**

**V. Lambda Calculus fulfilling the 3 conditions for “Turing Complete”** **Computation** :

**Unbounded**“**Storage**” (*not necessarily a physical device*) – generate arbitrarily complicated values in a variable or many functions without bound.**Arithmetic**– Church numerals (Peano arithmetic using functions): eg z=0, s= z+ 1 => 1 = λ s z . s z => 2 = λ s z . s ( s z ) … => 7= λ s z . s (s(s(s(s(s(s(z )))))))**Control Flow**– TRUE =*λ**t f . t*/ FALSE =*λ**t f . f / BoolAnd =**λ**x y . x y FALSE /**BoolOr =**λ**x y . x TRUE y /*Repetition by Recursion*(Y Combinator*)

Conclusion:Lambda Calculus = “Computer on paper”

**VI. Type** – Consistent Model (notation “**:**“)

eg. *λ** x **: I **. x + 3 ( I is Integer Type) *

*=> The result (x + 3) is also Type I since by inference “+” is of Type I -> I*

**Reference**: “Good Math” by Mark Chu-Carroll https://www.amazon.com/Good-Math-Computation-Pragmatic-Programmers/dp/1937785335/

# Top 6 IoT Languages in Pay

Namely:

Java, C, C++, Python, Javascript, Go

The more modern “**Functional Programming**” languages are yet to show the popularity : Haskell, Scala, Clojure, Kotlin (Google / Jetbean). **Reason**: High learning curve and too abstract mathematics .

http://www.ioti.com/engineering-and-development/six-best-paid-iot-programming-languages

# Kotlin / Native: Clion

Kotlin write once run on many: JVM, Javascript, and … on natives eg. MacOS without JVM. Still at development early stage!

https://blog.jetbrains.com/kotlin/2017/11/kotlinnative-ide-support-preview/

# Explore Kotlin’s Advanced Functional Programming

Since May 2017 Kotlin released by Google, 12.8% Java developers have converted to Kotlin, yet they still keep to the OO spirit of Java (for Interoperability) , not taking full advantage of FP capability of Kotlin. The OO Design Patterns of Android Java still being used instead of the FP more elegant “Monadic” Design.

1. **Interview with Kotlin Designer:**

**2. Android Studio 3.0 Released **: https://www.androidauthority.com/android-studio-3-released-810099/

2a. **Android Studio** **v3.0** with Kotlin built-in & many improvements.

(The previous stable v2.3 needs seperate Kotlin plug-in)

2c: **Gradle upgrade**

https://zhuanlan.zhihu.com/p/30722989

3. **Inner / Infix Function**

http://thetechnocafe.com/more-about-functions-in-kotlin/

4. **Test** (**Mockito**)

https://proandroiddev.com/improve-your-tests-with-kotlin-in-android-pt-1-6d0b04017e80

https://proandroiddev.com/improve-your-tests-with-kotlin-in-android-pt-2-f3594e5e7bfd

**Kluent library:**

https://proandroiddev.com/improve-your-tests-with-kotlin-in-android-pt-3-104e1c9f77cc

5. **Function vs Procedure vs Method** – **Kotlin** simplifies all 3 into 1 : **Function **which always returns a value or UNIT.

6. Kotlin has which Java lacks … “**with**“, “?”, …

https://blog.simon-wirtz.de/kotlin-features-miss-java/

7. Kotlin **Operator Overloadin**g aka “Convention”: ‘plus’ / ‘+’

https://blog.simon-wirtz.de/kotlin-conventions-operator-overloading/

8. **JVM Byte Code Generation**:

https://blog.simon-wirtz.de/kotlin-on-the-jvm-byte-code-generation/

9. **Reified** Types

https://blog.simon-wirtz.de/kotlin-reified-types/

10. **SICP: Sequence as conventional interfaces: eg. flatmap, map, reduce, fold**

https://dzone.com/articles/conventional-interfaces-in-functional-programming

11.Kotlin中**extensions**的用法

https://zhuanlan.zhihu.com/weiweidaolai/27537731

12. **Generic : **Kotlin入门(11)江湖绝技之特殊函数

https://zhuanlan.zhihu.com/aqi00/28302792

13. Array <String>: Kotlin入门(4)声明与操作数组

https://zhuanlan.zhihu.com/aqi00/27744799

14. **ViewPager** (Horizontal Swipe)

https://www.raywenderlich.com/169774/viewpager-tutorial-android-getting-started-kotlin

15. **Kotlin 1.2 Beta **& **Multiplatform iOS**

https://blog.jetbrains.com/kotlin/2017/11/kotlinconf-keynote-recap/

16. **Kotlin Edu ( Android Studio 3.0)**

https://www.jetbrains.com/education/kotlin-edu/

17. **Kotlin Style Guide**

https://android.github.io/kotlin-guides/style.html

18. **Android Layout F**oundamental – **ConstraintLayout**

https://developer.android.com/guide/topics/ui/declaring-layout.html

19. **Android SDK **

https://www.raywenderlich.com/171148/android-sdk-versions-tutorial-2

20. **Javalin v1.0** – Web Framework for Java + Kotlin

https://jaxenter.com/javalin-1-0-is-here-138750.html

21. **Ten Modern Features **(Kotlin, Clojure, Javascript, Swift…)

22. **Function literals with receiver**

https://blog.simon-wirtz.de/function-literals-with-receiver-quick-introduction/#page

23. **Sealed classes**: (restricted types no “else”)

https://mindorks.com/course/advance-kotlin/chapter/id/1

24. **Android Intent**

https://www.raywenderlich.com/171071/android-intents-tutorial-kotlin

# Univalent Foundation – Computer Proof of All Maths

The scary complex field of Math worried the mathematicians who would prove a theorem relying on the previous theorems assumed proven correct by other mathematicians.

A sad example was Zhang YiTang (1955 – ) who prepared his PhD Thesis based on a previous “flawed” Theorem proved by none other than his PhD Advisor Prof Mok in Purdue University. Unfortunately his Thesis was found wrong, and the tragic happened to Zhang as he had revealed the mistake of his PhD advisor who insisted his (Mok’s) Theorem was correct. As a result Zhang failed the 7-year PhD course without any teaching job recommendation letter from his angry advisor. He ended with a Subway Sandwich Kitchen job offered by his Chinese friend, sleeping in another Chinese music conductor’s house on a sofa. It was there he spent another 7 years thinking on Math, finally an Eureka breakthrough one 2013 morning in the backyard wild forest – the proof of the famous “70 million Prime Gap Conjecture”!

**Univalent Foundation** was born out of the same requirement by the (late) mathematician Vladimir Voevodsky (1966 – 2017) [#] – Use computer to prove Mathematics !

https://www.quantamagazine.org/univalent-foundations-redefines-mathematics-20150519/

Note : [#] Vladimir Voevodsky