LINUX.ORG.RU

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

Исправление MOPKOBKA, (текущая версия) :

(define (materialize lst)
  (cond
    [(not (procedure? lst)) lst]
    [(null? (lst 'cdr))
     (my-cons (lst 'car) null)]
    [(my-cons (materialize (lst 'car)) (materialize (lst 'cdr)))]))

(define (to-json lst)
  (cond
    [(null? lst) (printf "null")]
    [(procedure? lst)
     (printf "[")
     (to-json (lst 'car))
     (printf ", ")
     (to-json (lst 'cdr))
     (printf "]")]
    [else
     (printf "~a" lst)]))

(define lst (my-iota 3))
(define lst2 (materialize lst)) ;; сериализация в cons
(printf "materialize end~%") ;; сериализация в json
(to-json lst2)

Вывод:

iota call
iota call
iota call
iota call
iota call
iota call
materialize end
[1, [2, [3, null]]]

А бесконечные списки и на обычных делаются простым использованием my-cdr в вместо cdr.

Да и в ассемблере тоже, осталось пропатчить остальные функции.

Исправление MOPKOBKA, :

(define (materialize lst)
  (cond
    [(not (procedure? lst)) lst]
    [(null? (lst 'cdr))
     (my-cons (lst 'car) null)]
    [(my-cons (materialize (lst 'car)) (materialize (lst 'cdr)))]))

(define (to-json lst)
  (cond
    [(null? lst) (printf "null")]
    [(procedure? lst)
     (printf "[")
     (to-json (lst 'car))
     (printf ", ")
     (to-json (lst 'cdr))
     (printf "]")]
    [else
     (printf "~a" lst)]))

(define lst (my-iota 3))
(define lst2 (materialize lst))
(printf "materialize end~%")
(to-json lst2)

Вывод:

iota call
iota call
iota call
iota call
iota call
iota call
materialize end
[1, [2, [3, null]]]

А бесконечные списки и на обычных делаются простым использованием my-cdr в вместо cdr.

Да и в ассемблере тоже, осталось пропатчить остальные функции.

Исправление MOPKOBKA, :

(define (materialize lst)
  (cond
    [(not (procedure? lst)) lst]
    [(null? (lst 'cdr))
     (my-cons (lst 'car) null)]
    [(my-cons (materialize (lst 'car)) (materialize (lst 'cdr)))]))

(define (to-json lst)
  (cond
    [(null? lst) (printf "null")]
    [(procedure? lst)
     (printf "[")
     (to-json (lst 'car))
     (printf ", ")
     (to-json (lst 'cdr))
     (printf "]")]
    [else
     (printf "~a" lst)]))

(define lst (my-iota 3))
(define lst2 (materialize lst))
(printf "materialize end~%")
(to-json lst2)

Вывод:

iota call
iota call
iota call
iota call
iota call
iota call
materialize end
[1, [2, [3, null]]]

А бесконечные списки и на обычных делаются простым использованием my-cdr в вместо cdr.

Да и в ассемблере тоже, осталось пропатчить остальные функции.

Исходная версия MOPKOBKA, :

(define (materialize lst)
  (cond
    [(not (procedure? lst)) lst]
    [(null? (lst 'cdr))
     (my-cons (lst 'car) null)]
    [(my-cons (materialize (lst 'car)) (materialize (lst 'cdr)))]))

(define (to-json lst)
  (cond
    [(null? lst) (printf "null")]
    [(procedure? lst)
     (printf "[")
     (to-json (lst 'car))
     (printf ", ")
     (to-json (lst 'cdr))
     (printf "]")]
    [else
     (printf "~a" lst)]))

(define lst (my-iota 3))
(define lst2 (materialize lst))
(printf "materialize end~%")
(to-json lst2)

Вывод:

iota call
iota call
iota call
iota call
iota call
iota call
materialize end
[1, [2, [3, null]]]