Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simeonhristov99/fp_cs_24-25
Practice sessions of group 1 for the course "Functional Programming" in the Faculty of Mathematics and Informatics, Sofia University.
https://github.com/simeonhristov99/fp_cs_24-25
functional-programming haskell higher-order-functions lambda-functions lazy-evaluation racket recursion
Last synced: about 1 month ago
JSON representation
Practice sessions of group 1 for the course "Functional Programming" in the Faculty of Mathematics and Informatics, Sofia University.
- Host: GitHub
- URL: https://github.com/simeonhristov99/fp_cs_24-25
- Owner: SimeonHristov99
- License: mit
- Created: 2024-09-21T19:08:49.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-12-18T05:44:39.000Z (about 2 months ago)
- Last Synced: 2025-01-01T08:15:54.909Z (about 1 month ago)
- Topics: functional-programming, haskell, higher-order-functions, lambda-functions, lazy-evaluation, racket, recursion
- Language: Haskell
- Homepage: https://learn.fmi.uni-sofia.bg/course/view.php?id=10530
- Size: 3.25 MB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Functional Programming, Computer Science, Winter Semester 2024-2025
## Algorithm for solving exercises
1. What is the name of the procedure/function?
2. How many parameters does it take?
3. What is the type of the parameters?
4. What are the names of the parameters?
5. What is the return type?
6. Break the task into smaller tasks. List them.## Do not be afraid to ask questions
> 📌 If you are struggling a lot with the tasks, don't hesitate to ask us for a `1-1 session` in-person or via Google Meet 😇!
and remember:
> He who asks a question is a fool for five minutes; he who does not ask a question remains a fool `forever`.
-Chinese Proverb
## Resources
### Administrative
- [Grading scheme](https://learn.fmi.uni-sofia.bg/pluginfile.php/511360/mod_resource/content/0/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0%20%D0%BD%D0%B0%20%D0%9E%D1%86%D0%B5%D0%BD%D1%8F%D0%B2%D0%B0%D0%BD%D0%B5.pdf)
### Functional programming
- [Pure code, no bugs](https://www.youtube.com/watch?v=HlgG395PQWw)
### Haskell
- [HASKELL IN 100 SECONDS](https://youtu.be/Qa8IfEeBJqk)
- [Youtube channel (beginner to advanced)](https://www.youtube.com/channel/UC3xdLFFsqG701QAyGJIPT1g/videos)
- [Book](http://learnyouahaskell.com/chapters) (read chapters [1 .. 8])
- [Library for working with lists (Data.List)](https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-List.html)
- [Library for working with characters/digits (Data.Char)](https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Char.html)
- [Youtube channel (advanced)](https://www.youtube.com/c/Tsoding/videos)
- [Learn Haskell in 1 hour](https://www.youtube.com/watch?v=02_H3LjqMr8)### Racket
- [Introduction to Racket and Dr. Racket](https://www.youtube.com/playlist?list=PLXaqTeMx01E_eK1ZEpKvKL5KwSaj7cJW9)
- [Racket API](https://docs.racket-lang.org/reference/)
- [CHEAT SHEET](https://docs.racket-lang.org/racket-cheat/index.html)
- [Working with numbers](https://docs.racket-lang.org/math/number-theory.html)
- [Working with lists and pairs](https://docs.racket-lang.org/reference/pairs.html)
- [Some built-in procedures](https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_8.html)
- [Install DrRacket](https://download.racket-lang.org/)## Sessions with Simo
1. :white_check_mark: **03.10, Thursday, 8 am, 107**
2. :white_check_mark: 08.10, Tuesday, 6 pm, 314
3. :white_check_mark: 15.10, Tuesday, 6 pm, 314
4. :white_check_mark: 22.10, Tuesday, 6 pm, 314
5. :white_check_mark: 29.10, Tuesday, 6 pm, 314
6. :white_check_mark: 05.11, Tuesday, 6 pm, 314
7. :white_check_mark: 12.11, Tuesday, 6 pm, 314
8. :white_check_mark: 19.11, Tuesday, 6 pm, 314
9. :white_check_mark: 26.11, Tuesday, 6 pm, 314
10. :white_check_mark: 03.12, Tuesday, 6 pm, 314
11. :white_check_mark: 10.12, Tuesday, 6 pm, 314
12. :white_check_mark: **16.12, Monday, 11 am, 314**
13. :white_check_mark: 17.12, Tuesday, 6 pm, 314
14. 07.01, Tuesday, 6 pm, 314
15. 14.01, Tuesday, 6 pm, 314## Frequently Asked Questions
### 1. I'm not in the Moodle class. What do I do?
Everything is ok - we'll fix that. Just come and tell me or send me an email. I only need your faculty number.
### 2. A friend of mine is not in the Moodle class. What do I do?
They have to come personally to me and tell me or send me an email with their faculty number.
### 3. Can I use generative AI?
No. When you have questions, just ask me - let's grow together, not separated.
### 4. Why can't I use generative AI?
I prefer we share to each other when we have problems and try to solve them together. University is about growing together and is nested in genuine and sincere conversations. I stand beside you and want to be next to you whenever you're having difficulties.
There is nothing wrong in asking me questions.
There's a lot wrong with trying to fool me you know more than you do.
### 5. What if I'm caught using generative AI?
Your work will be considered forged.
### 6. What is `For Home`?
`For Home` is a system having the only goal of making sure you understand what we discuss and do in class, thus helping you to become a better programmer.
Its essence:
- specially curated tasks that are present after each practice session;
- you solve them whenever you want to and have free time;
- you submit them before the next session over email (if you can't, drop me a line beforehand and all will be ok);
- I check your solutions and give either a `Yes` or feedback on what I would like us to work on;
- (iteration) you implement the feedback and submit again. I check and provide either `Yes` or feedback on what I would like us to work on;
- you reap the benefits the system provides: a maximum of `50%` point increase for each homework, exam and final **that I grade**.The most important characteristic of `For Home` is **iterative feedback**. Its goal is **not** to be a one-time-submission. It's goal is to make you a better programmer via **iterative feedback**.
It's not as dumb as you may think and has great power to transform how you think, how fast you problem-solve and how you perform on other programming subjects.
> **Note:** You cannot submit `For Home` for week `n + i, i > 0`, if week `n` is not approved with `Yes`.
### 7. How to submit `For Home`?
Only over email, using the already established email thread.
### 8. You are too mean and cause me psychological stress. How do I convey this to you?
This can definitely happen as it's more than certain that the feedback I'll give you:
- will be direct;
- will not focus much on what you did great;
- will focus a lot on what is not correct and has to be fixed.**Tell me as soon as you see such signs. Come and talk to me in person.** I'll understand and correct my behavior.
Something which you may not accept is that whatever I do, I do it because I love you and want you to improve and go way beyond what you think is possible 💓. However, sometimes too many people use external help which in turn taints this.
### 9. What if I'm having difficulties with tasks from `For Home`?
Option 1: You ask me in-person. I'll be leading the elective disciple `Machine Learning and Data Mining` on Monday, 8 am. You can come then and ask me there as well.
Option 2: We arrange a Google Meet.
Option 3: Skip these. Solve as much as you can. Write your idea for each of the tasks you couldn't solve: for each task answer the following questions in comments:
1. What is the name of the procedure/function?
2. How many parameters does it take?
3. What is the type of the parameters?
4. What are the names of the parameters?
5. What is the return type?
6. Break the task into smaller tasks. List them.Then, you'll basically have a set of tasks that are solved and a set of tasks for which you've outlined what you want to do. You send these two sets over email.
### 10. Does getting a `Yes` mean getting a `bonus`?
No. It means that I've approved the submitted code and you can continue with the next ones.
### 11. Is it mandatory to submit `For Home`?
No. It's meant to increase your grade, but if you're fine without it, that's not a problem.
### 12. If I do not submit `For Home`, do I get punished?
No. However, note that I have a very strict standard (code is easy to read, safe from bugs and ready for change). You'll be graded against it and without a bonus, you won't have the ability to make me "close my eyes" if something is not fulfilled.
### 13. What do you suggest as the best approach to achieve the highest score in all exams and homeworks?
1. Learn by doing, rather than listening.
2. Do you use code generators.
3. Go through `notes.txt` for the current week (some weeks may not have new information).
4. (optional) Resolve the tasks we solved in class.
5. If you have questions on points `3.` and/or `4.` ask without doubt!
6. Try to solve as much tasks as you can from the `For Home` section.
7. If you can't solve a task, skip it - continue with the rest.
8. After you've solved as much as you could, submit an email, highlighting what you tried and what your idea was.### 14. Can I use external help - for example, repos/solutions from other current/previous year students?
No. Just ask me when you need help. I'll help you more than everything you can access via Internet * `100`. Don't believe it - try me ^_^ (also, asking previous year students may help)!