PasteRack.org
Paste # 47645
2017-04-23 08:53:09

Fork as a new paste.

Paste viewed 13 times.


Embed:

#lang heresy

(import rkt racket/base)

(describe Cons
          (car Null)
          (cdr Null))

(def fn cons (a b)
  (Cons (list a b)))

(def fn car (l)
  (l 'car))

(def fn cdr (l)
  (l 'cdr))

(def fn cons? (v)
  (and (fn? v)
       (rkt:with-handlers ((rkt:exn:fail (fn (e) False)))
                          (and (v 'car)
                               (v 'cdr)))))

(def fn print-cons (l)
  (select
   ((null? l) "Null")
   ((cons? (car l)) (format$ "Cons(#_, #_)" (print-cons (car l)) (print-cons (cdr l))))
   (else (format$ "Cons(#_, #_)" (car l) (print-cons (cdr l))))))

(def fn cons->list (l)
  (select
   ((null? l) l)
   ((cons? (car l)) (join (cons->list (car l))
                        (cons->list (cdr l))))
   (else (join (car l)
               (cons->list (cdr l))))))

(print-cons (cons 1 (cons (cons 2 (cons 4 Null)) (cons 3 Null))))

(cons->list (cons 1 (cons (cons 2 (cons 4 Null)) (cons 3 Null))))

=>

standard-module-name-resolver: collection not found
  for module path: (submod heresy reader)
  collection: "heresy"
  in collection directories:
   /home/pasterack/.racket/6.8/collects
   /home/pasterack/racket68/collects
   ... [161 additional linked and package directories]
  context...:
   show-collection-err
   standard-module-name-resolver
   /home/pasterack/racket68/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:112:0: get-tokens
   /home/pasterack/racket68/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:56:0: typeset-code15
   /home/pasterack/pasterack/tmp/47645/47645code.scrbl: [running body]
   loop
   ...cket/cmdline.rkt:179:51
   /home/pasterack/racket68/share/pkgs/scribble-lib/scribble/run.rkt: [running body]