Compare commits

...

7 Commits

Author SHA1 Message Date
94bba82e49 a 2025-03-23 18:18:38 +01:00
151aeb4a5d das 2025-03-21 20:57:08 +01:00
698229eb45 linkers 2025-03-21 20:56:29 +01:00
1bc1c95904 new 2025-03-21 20:55:20 +01:00
456cf0cc7e new 2025-03-21 20:54:44 +01:00
c712b0d122 links 2025-03-21 20:54:16 +01:00
bf0d91a268 answered questions 2025-03-21 18:03:31 +01:00
2 changed files with 59 additions and 4 deletions

View File

@ -52,17 +52,55 @@ f = \x y -> x (x (x y))
```
## Questions
> How does one do the equations?
> CLI is functional?
Not really. It fits the functional mindset.
Commands are:
- pure, input leads to output
- composable with the pipe, kinda like `(.)`
- They can be composed like higher order functions, i.e. one command can be the input to another command
> Lazy and singly-linked lists, what's the relation?
In reality though, they are not functional. Their main goal is to interact with the system (a.k.a. a mutable state), which obviously breaks the functional paradigm.
> Y combinator?
A function, which allows us to define recursive functions without giving them a name. It gives us a fixed point of a function, i.e. a function that doesn't change when you apply it to itself.
In other words, finds a value $x$ such that $f(x) = x$.
```hs
y f = f (y f) -- this is the Y combinator
```
Example:
```hs
fact = \f n -> if n == 0 then 1 else n * f (n-1) -- n! = f(n) = n * f(n-1) = n * (n-1) * f(n-2) = ...
```
If we were to not use the Y combinator, we would have to define the function as:
```hs
fact = \n -> if n == 0 then 1 else n * fact (n-1)
```
> In which cases would it be impossible to not use the Y combinator?
Whenever we are working with a system that has no named functions, but we still want recursion.
In the context of Haskell, using the Y combinator (in the classical lambda calculus way) is elegant, yet not necessary.
Rewriting our factorial function using `where`:
```hs
fact :: Int -> Int
fact n = f n
where
f 0 = 1
f n = n * f (n-1)
```
is way more readable and intuitive.
## Resources
- [course](https://www.cis.upenn.edu/~cis1940/spring15/lectures.html)
- [standard list](https://hackage.haskell.org/package/base-4.21.0.0/docs/Data-List.html)
[^1]: need to find the actual rigorous way of doing this
[^1]: need to find the actual rigorous way of doing this
[^2]: Referential transparency

View File

@ -0,0 +1,17 @@
## Lists
```hs
------------ !! mapAccumL
mapAccumL :: (s -> a -> (s, b)) -> s -> [a] -> (s, [b])
------------
```
> Generics in C?
> Implement Haskell lists in Python
> Forall and exists in functional programming
https://hackage.haskell.org/package/base-4.3.1.0/docs/src/Data-List.html