История изменений
Исправление MOPKOBKA, (текущая версия) :
Если бы в Lisp реализовали cons-ячейки через функции, то была бы возможность создавать бесконечные списки, лениво-генерируемые списки, вставлять генераторные цепочки фильтров итд.
Пример:
(define (my-cons car cdr)
(lambda (r)
(cond
[(eq? r 'car) car]
[(eq? r 'cdr) cdr])))
(define (my-iota i [j 1])
(my-cons
j
(cond
[(< j i)
(lambda (r)
((my-iota i (add1 j)) r))]
[else null])))
(define lst (my-iota 3))
(println (lst 'car)) ;; 1
(println ((lst 'cdr) 'car)) ;; 2
(println (((lst 'cdr) 'cdr) 'car)) ;; 3
(println (((lst 'cdr) 'cdr) 'cdr)) ;; nil
(define lst2 (my-iota 99999999999))
(println (((lst2 'cdr) 'cdr) 'car)) ;; 3
Исправление MOPKOBKA, :
Если бы в Lisp реализовали cons-ячейки через функции, то была бы возможность создавать бесконечные списки, лениво-генерируемые списки, вставлять генераторные цепочки фильтров итд.
Пример:
(define (my-cons car cdr)
(lambda (r)
(cond
[(eq? r 'car) car]
[(eq? r 'cdr) cdr])))
(define (my-iota i [j 1])
(my-cons
j
(cond
[(< j i)
(lambda (r)
((my-iota i (add1 j)) r))]
[else null])))
(define lst (my-iota 3))
(println (lst 'car)) ;; 1
(println ((lst 'cdr) 'car)) ;; 2
(println (((lst 'cdr) 'cdr) 'car)) ;; 3
(println (((lst 'cdr) 'cdr) 'cdr)) ;; nil
(define lst2 (my-iota 99999999999))
(println (((lst 'cdr) 'cdr) 'car)) ;; 3
Исправление MOPKOBKA, :
Если бы в Lisp реализовали cons-ячейки через функции, то была бы возможность создавать бесконечные списки, лениво-генерируемые списки, вставлять генераторные цепочки фильтров итд.
Пример:
(define (my-cons car cdr)
(lambda (r)
(cond
[(eq? r 'car) car]
[(eq? r 'cdr) cdr])))
(define (my-iota i [j 1])
(my-cons
j
(cond
[(< j i)
(lambda (r)
((my-iota i (add1 j)) r))]
[else null])))
(define lst (my-iota 3))
(println (lst 'car)) ;; 1
(println ((lst 'cdr) 'car)) ;; 2
(println (((lst 'cdr) 'cdr) 'car)) ;; 3
(println (((lst 'cdr) 'cdr) 'cdr)) ;; nil
Исходная версия MOPKOBKA, :
Если бы в Lisp реализовали cons-ячейки через функции, то была бы возможность создавать бесконечные списки, лениво-генерируемые списки, вставлять генераторные цепочки фильтров итд.
Пример:
(define (my-cons car cdr)
(lambda (r)
(cond
[(eq? r 'car) car]
[(eq? r 'cdr) cdr])))
(define (my-iota i [j 1])
(my-cons
j
(cond
[(< j i)
(lambda (r)
((my-iota i (add1 j)) r))]
[else null])))
(define lst (my-iota 3))
(println (lst 'car))
(println ((lst 'cdr) 'car))
(println (((lst 'cdr) 'cdr) 'car))
(println (((lst 'cdr) 'cdr) 'cdr))