### Understand "curry" function

Posted:

**Sun Nov 25, 2018 9:28 am**This is what I understand ...

I can map a function with multiple arguments in this way:
where: 8 = 2^3, 1 = 1^4

But, if the list of arguments are within a list:
I got an error:
I use "curry" to solve this problem:
where: 2 = 2^1, 81 = 3^4

Ok, transpose the list of arguments:
This is equivalent to:
We can define a user function too:
Another example:
Did I get it right?

cameyo

p.s. sorry for poor english...

I can map a function with multiple arguments in this way:

Code: Select all

```
(map pow '(2 1) '(3 4))
;-> (8 1)
```

But, if the list of arguments are within a list:

Code: Select all

`(setq lst '((2 1) (3 4)))`

Code: Select all

```
(map pow lst)
ERR: value expected in function pow : '(2 1)
```

Code: Select all

```
(map (curry apply pow) lst)
;-> (2 81)
```

Ok, transpose the list of arguments:

Code: Select all

```
(map (curry apply pow) (transpose lst))
;-> (8 1)
```

Code: Select all

```
(map (lambda(x) (apply pow x)) (transpose lst))
;-> (8 1)
```

Code: Select all

```
(define (mypow lst)
(if (null? lst) '()
(cons (pow (nth '(0 0) lst) (nth '(0 1) lst)) (mypow (rest lst)))
)
)
```

Code: Select all

```
(setq lst '((2 1) (3 4)))
(mypow (transpose lst))
;-> (8 1)
```

Code: Select all

```
(map max '(3 5) '(2 7))
;-> (3 7)
(map (curry apply max) '((3 5) (2 7)))
;-> (5 7)
(map (curry apply max) (transpose '((3 5) (2 7))))
;-> (3 7)
```

cameyo

p.s. sorry for poor english...