> 1 <

Автор Сообщение

[novichok]

Members


Статус

2 сообщений

Где: Russia
Род занятий:
Возраст:

#5887   2012-03-15 00:35 GMT+3 часа(ов)      
сегодня налекции расказывали о ф-ях высшего порядка и привели несколько примеров. Одним из них был map.
нам его определили примерно так :
(define (map f x)(if (null? x) (lisp)
( cons (f (car x)) (map f (cdr x)))))
Еще привели примеры его использования. Ввел в ступор такой:
(map cons '(a b c) '(1 2 3))
с ответом
((a.1) (b.2) (c.3))
Но, мы же определяем ф-ю одного аргумента!
Как я понял уже дома. В интерпреторе scheme map уже есть и эта комбинация там выполняется, но не выполняется если определить map как дали на лекции, как раз ругается на количество параметров.
Теперь вопрос. Как определить map, чтобы он работал как стандартный?

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#5894   2012-03-15 03:24 GMT+3 часа(ов)      
Один из вариантов
(define (my-map f l . ls)
(letrec ((map1 (lambda (f l)
(if (null? l)
l
(cons (f (car l))
(map1 f (cdr l)))))))
(cond
((null? l)
l)
((null? ls)
(map1 f l))
(else
(cons (apply f (car l) (map1 car ls))
(apply my-map f (cdr l) (map1 cdr ls)))))))
> 1 <


Онлайн :

0 пользователь(ей), 31 гость(ей) :




Реклама на сайте: