вопрос по scheme
От: frogkiller Россия  
Дата: 11.09.06 20:34
Оценка:
Изучаю язык по MIT'овской книжке (ссылка здесь где-то проскакивала).
Второй день ломаю голову над задачей (видно, трудно перестроиться на их образ мышления)

Там в одной из задач (3.50) предложено написать обобщённую функцию stream-map, заполнив недостающие фрагменты:


(define (stream-map proc . argstreams)
        (if (<...> (car argstreams))
                the-empty-stream
                (<...>
                        (apply proc (map <...> argstreams))
                        (apply stream-map
                                (cons proc (map <...> argstreams))))))


Честно говоря, я в ауте. Подскажите, как это сделать?


Вообще, мне кажется, всё упирается в функцию apply.
Опять-таки не понимаю, как она должна быть реализована... По идее она должна применять какую-либо операцию к списку.
Т.е. для бинарной операции что-то типа:
(define (apply proc args)
    (if (= (length args) 1) 
        (car args)
        (proc (car args) (apply proc (cdr args)))))


Тогда stream-map я бы сделал несколько иначе:

(define (stream-map proc . argstreams)
    (if (stream-null? (car argstreams))
        the-empty-stream
        (cons-stream
            (apply proc (map stream-car argstreams))
            (stream-map proc (map stream-cdr argstreams)))))


где map задана в виде:

(define (map proc items)
    (if (null? items)
        '()
        (cons (proc (car items))
            (map proc (cdr items)))))



Но как быть, например, если операция, например, триарная? Или в общем случае n-арная?
Объясните, плиз.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.