LINUX.ORG.RU

История изменений

Исправление 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))