## Questions and Answers

What is the main reduction rule of the semantic of the lambda-calculus?

beta-reduction

In Haskell, which list representation is syntactic sugar for [1,2,3]?

[1,2:3:[]]

Which concept is not a key feature of functional programming?

mutable variables

Why is Haskell considered a pure functional programming language?

Signup and view all the answers

Which technique is NOT used to convert a recursive function into a tail recursive one?

Signup and view all the answers

In the Haskell function definition product [] = 1 product (x:xs) = x * product xs, what concept is illustrated?

Signup and view all the answers

What is the value of the expression `foldr (-) 0 [1, 2, 3]`

?

Signup and view all the answers

What is the type of the polymorphic Haskell function `head`

?

Signup and view all the answers

What is the type of the `const`

function?

Signup and view all the answers

What is the value of the expression `flip (-) 1 2`

?

Signup and view all the answers

What kind of algebraic data type is `(a, b)`

in Haskell?

Signup and view all the answers

What does the `foldl (flip (:)) [] "drawer"`

expression evaluate to?

Signup and view all the answers

## Study Notes

### Haskell Functions

- A function with exactly one recursive call and its return value is immediately returned by the calling function.

### Section Function

- The section (^2) is equivalent to \x -> 2^x.

### Fold Expressions

- Evaluation of foldr (+) 0 [1, 2, 3] = 6
- Evaluation of foldr (-) 0 [1, 2, 3] = 2
- Evaluation of foldl (+) 0 [1, 2, 3] = 6
- Evaluation of foldl (-) 0 [1, 2, 3] = -6
- Evaluation of foldr (+) 5 [1, 2, 3] = 11
- Evaluation of foldl (-) 5 [1, 2, 3] = -1

### Polymorphic Functions

- Type of max a b = if a > b then a else b is a -> a -> a
- Type of head (x:xs) = x is [a] -> a
- Type of length [] = 0; length (x:xs) = 1 + length xs is Num n => [a] -> n
- Type of maximum = foldl max where max a b = if a > b then a else b is (Foldable t, Ord a) => t a -> a

### Const Function

- Evaluation of const (1+) 10 100 = 101
- Type of const x _ = x is a -> b -> a
- Evaluation of foldr (const (1+)) 0 [2, 31, 1] = 3
- Evaluation of foldl (const (1+)) 0 [2, 31, 1] = 2

### ++ Function

- Evaluation of "c" ++ "++" = "c++"
- Type of (++) is [a] -> [a] -> [a]
- foldr (++) [] flattens a list of lists

### Flip Function

- Evaluation of flip (-) 1 2 = 1
- Type of flip f a b = f b a is (a -> b -> c) -> (b -> a -> c)

### Algebraic Data Types

- Type (a, b) is a product
- fst and snd are projection functions

### Lambda-Calculus

- The main reduction rule of the semantic of lambda-calculus is beta-reduction

### List in Haskell

- A list [1,2,3] is syntactic sugar for 1 : 2 : 3 : [] which is equivalent to 1 : (2 : (3 : []))

### Recursion in Functional Programming

- Tail recursion is an important concept in functional programming
- Techniques to transform a recursive function into an equivalent tail recursive function include accumulating parameters

### Properties of Haskell

- Haskell is a pure functional programming language, meaning the evaluation of expressions has no side-effects
- Mutable variables are not a feature of Haskell
- Algebraic data types, particularly co-products, are used where other languages would use NULL pointers
- Pattern matching is used in the Haskell function definition product [] = 1; product (x:xs) = x * product xs

## Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

## Description

Test your knowledge on lambda calculus and functional programming concepts with this quiz. From reduction rules to recursion, see how well you understand these fundamental principles in computer science.