Skip to content

Commit

Permalink
Added new Readme, a homewrok exercice and other improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
gcnew committed Nov 12, 2016
1 parent 6a5286e commit c48c6b3
Show file tree
Hide file tree
Showing 18 changed files with 548 additions and 414 deletions.
24 changes: 20 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
Домашно №2
====
- **Седмица 1 (19.10.2016)**
[Относно курса](lectures/00-setup/setup.md)
[Що е то функционално програмиране? История на Haskell](lectures/01-intro/intro.md)
[Въведение в Haskell. Основени типове и синтаксис.](lectures/02-syntax-and-types/syntax-and-types.md)

**ВАЖНО:** Вижте [lists](./exercises/lists/Lists.md) за Домашно №2
- **Седмица 2 (26.10.2016)**
[Въведение част 2 Lists, Guards and Pattern matching](lectures/03-lists-guards-patterns/lists-guards-patterns.md)
Домашно: [Езика на разбойниците](exercises/secret-lang/Secret-lang.md) ([secret-lang](exercises/secret-lang))

- **Седмица 3 (02.11.2016)**
[Работа със списъци](exercises/lists/Lists.md)
Задачи от часа: [Lists.hs](exercises/lists/Lists.hs), [Colorize](exercises/colorize/Colorize.md) ([colorize](exercises/colorize))
Домашно: [Домашно Lists](exercises/lists/ListsHW.md) ([lists](exercises/lists))

- **Седмица 4 (09.11.2016)**
[List comprehension ](lectures/04-list-comprehension/lcomprehension.md)
Задачи от часа: [listcomp.md](exercises/list-comp/listcomp.md) ([list-comp](exercises/list-comp))
Домашно: [Пермутации](exercises/permutations/perm.md) ([permutations](exercises/permutations))

---

# fp-haskell
**Допълнителни материали**
[Литература, среда и др.](lectures/00-setup/extra.md)

3 changes: 3 additions & 0 deletions exercises/colorize/Colorize.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import Colorize hiding (mkStyle, mkTextStyle)
```
-->

Colorize
====

Хаки МакХакер, син на най-уважаваните програмисти в Ламбда Ленд, тамън започва да се учи да програмира. Амбициозните му родители са му дали за задача да принтира цветен текст по терминала на Линукската му машина. Хаки, незнаейки как да се справи, е решил да потърси решение в интернет форумите. След любезно запитаване в БезкрайнаРекурсия, Ти си видял въпроса му. Вече преминал обичайните чудения дали да го downvote-неш, че пита нещо очевидно, или че е поредният ученик търсещ бързо решение на домашното си, виждаш че той е положил усиля, като е прочел в WikiLambdia и се е опитал да достигне до решение, но без успех. От прочита на WikiLambdia, Хаки е дефинирал няколко цветови константи и е написал заготовки ([stubs](https://en.wikipedia.org/wiki/Stub)) на функциите `colorize` и `bleach`.


Expand Down
31 changes: 31 additions & 0 deletions exercises/list-comp/listcomp.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{-# OPTIONS_GHC -Wall #-}
module ListComp where

myLength :: [Int] -> Int
myLength list = sum [ 1 | _ <- list]

myElem :: Int -> [Int] -> Bool
myElem e list = not (null [x | x <- list, x == e])

myElem':: Int -> [Int] -> Bool
myElem' e l = and [True | x <- l, x == e]

myElem'':: Int -> [Int] -> Bool
myElem'' e l = or [ x == e | x <- l]

count :: Int -> [Int] -> Int
count e l = myLength [x | x <- l, x == e]


arithmeticSeries :: Int -> Int -> Int -> [Int]
arithmeticSeries a incrementator n = [a + x*incrementator | x <- [0..n-1]]

arithmeticSum :: Int -> Int -> Int -> Int
arithmeticSum a incrementator n = sum (arithmeticSeries a incrementator n)

geometricSeries :: Double -> Double -> Int -> [Double]
geometricSeries a q n = [a*q^x | x <- [0..n-1]]

geometricSum :: Double -> Double -> Int -> Double
geometricSum a q n = sum (geometricSeries a q n)

28 changes: 28 additions & 0 deletions exercises/list-comp/listcomp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# List comprehensions

- *Трансформацията с функция* на списък рекурсивно:
```hs
f :: [Int] -> [Int]
f [] = []
f (x:xs) = (някаквa-функция x) : f xs
```
e равносилна на:
```hs
[някаква функция x | x <- входния-списък]
```
<br/>
- Филтрацията на списък рекурсивно:
```hs
g :: [Int] -> [Int]
g [] = []
g (x:xs)
| някакво услове за x = g xs
| otherwise = x : g xs
```
е равносилна на:
```hs
[ x | x<- входен списък, някакво услове за х]
```


### **[Кодът](listcomp.hs)**, който писахме в клас.
13 changes: 0 additions & 13 deletions exercises/lists/Lists.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,6 @@ import Prelude hiding (
```
-->

Домашно №2
=====

Имплементирайте следните функции:
- [elem](#elem)
- [sum](#sum)
- [replicate](#replicate)
- [interleave](#interleave)

Бонус: всички останли. Започнте с тези за множества - [Списъци като множества](#Списъци-като-множества)

---

Работа със списъци
======

Expand Down
10 changes: 10 additions & 0 deletions exercises/lists/ListsHW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Домашно Lists
=====

Имплементирайте следните функции:
- [elem](Lists.md#elem)
- [sum](Lists.md#sum)
- [replicate](Lists.md#replicate)
- [interleave](Lists.md#interleave)

Бонус: всички останли. Започнте с тези за множества - [Списъци като множества](Lists.md#Списъци-като-множества)
7 changes: 7 additions & 0 deletions exercises/permutations/perm.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Permutations where

import Data.List hiding (permutations)

permutations :: [Int] -> [[Int]]
permutations = undefined

21 changes: 21 additions & 0 deletions exercises/permutations/perm.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

Пермутации
====

## Описание

Имплементерайте функцията `permutations:: [Int] -> [[Int]]`, която приема списък от числа и връща всички възможни [пермутации](https://www.mathsisfun.com/definitions/permutation.html).


## Примерен вход и изход

```hs
>permutations [1,2,3]

[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
```
## Бонус
Напишете функцията, като използвате най-много 200 символа (и без да сменяте името)!

### Насока
Броят на всички възможни пермутации на лист с `n` елемента е `n!`. Знаем, че `0! = 1`, какво трябва да връщаме при `permutations []`?
13 changes: 8 additions & 5 deletions exercises/secret-lang/Secret-lang.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Описание
Езика на разбойниците
====

## Описание
Много малки деца си измислят и използват *супер тайни езици*, за да крият информация и объркват родителите си. По всяка вероятност всеки може да се сети за поне няколко такива (например *пилешки говор* на български); явлението е толкова разпространено, че Wikipedia дори има [списък на най-известните такива езици](https://en.wikipedia.org/wiki/Language_game#List_of_common_language_games).

<p align="center">
Expand All @@ -9,19 +12,19 @@

Напишете програма, коята кодира низ нормален текст на тайния Rövarspråket.

# Примерен вход и изход
## Примерен вход и изход
Вход:
`I'm speaking Robber's language!`
Изход:
`I'mom sospopeakokinongog Rorobobboberor'sos lolanongoguagoge!`

# Бонус #1
## Бонус #1

Уверете се, че програмата ви работи правилно с главни букви. Така например `Hello` трябва да се преведе до `Hohelollolo`, а не `HoHelollolо`. Вижте функцията `toLower` в модула `Data.Char` и как може да я импортирате.

# Бонус #2**
## Бонус #2**

Напишете функция, която декодира низ обратно към нормален език *(допуснете, че даденият текст е във валиден Rövarspråket)*. Замислете се как бихте имплементирали и използвали функция `dropN`, която пропуска първите *n* символа от низ.

# Бележки
## Бележки
След като сте разкрили една шведска тайна, е време да преминете към следващата - [Surströmming](https://www.youtube.com/watch?v=wapOib5u8a8) (чудя се това дали изобщо да го има).
File renamed without changes.
6 changes: 3 additions & 3 deletions lectures/00-setup/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
*page_number:false
-->

Функционално Програмиране с Haskell
==
Относно курса
====

Георги Наков, [nakov.gl at gmail com](mailto:[email protected])
Марин Маринов, [marinov.ms+ tues at gmail com](mailto:[email protected])
Expand Down Expand Up @@ -39,4 +39,4 @@
extra-include-dirs: C:\Program Files\Haskell Platform\7.10.3\mingw\include
```

*(не препоръчваме да използвате Windows)*
*(не препоръчваме да използвате Windows)*
12 changes: 5 additions & 7 deletions lectures/01-intro/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
*page_number:false
-->

Въведение във
Функционалното Програмиране.
История на Haskell
==
Що е то функционално програмиране?<br/>История на Haskell
====

<br>
<br>
Expand Down Expand Up @@ -82,11 +80,11 @@
- резултатите от функции **не** се изчисляват преди да се необходими
- практически неприложимо при функции със странични ефекти
```hs
f x y z =
if x>0 then x+y else x+z
f x y z = if x>0 then x+y else x+z

f (5*6) (10-7) (5/0)
> f (5*6) (10-7) (5/0)
-- не се хвърля грешка
33
```
---
## Мързеливо оценяване
Expand Down
Loading

0 comments on commit c48c6b3

Please sign in to comment.