Clearing the screen by printing a character?

If you want to clear the screen, the “ANSI” sequence in a printf \033[2J clears the entire screen, e.g., printf ‘\033[2J’ The command-line clear program uses this, along with moving the cursor to the “home” position, again an “ANSI” sequence: \033[H The program gets the information from the terminal database. For example, for TERM=vt100, it … Read more

Y combinator discussion in “The Little Schemer”

Great question. For the benefit of those without a functioning DrRacket installation (myself included) I’ll try to answer it. First, let’s use some sane (short) variable names, easily trackable by a human eye/mind: ((lambda (h) ; A. (h h)) ; apply h to h (lambda (g) (lambda (lst) (if (null? lst) 0 (add1 ((g g) … Read more

Why did father of Clojure say that Scheme’s true/false are broken?

It strikes me you’d rather see it from the horse’s mouth, so here’s a choice extract from a message Rich posted: Scheme #t is almost completely meaningless, as Scheme conditionals test for #f/non-#f, not #f/#t. I don’t think the value #f has much utility whatsoever, and basing conditionals on it means writing a lot of … Read more

Are there any purely functional Schemes or Lisps?

The new Racket language (formerly PLT Scheme) allows you to implement any semantics you like with s-expressions (really any syntax). The base language is an eagerly evaluated, dynamically typed scheme variant but some notable languages built on top are a lazy scheme and a functional reactive system called Father Time. An easy way to make … Read more

Help understanding Continuations in Scheme

Try something simpler to see how this works. For example, here’s a version of a list-sum function that receives a continuation argument (which is often called k): (define (list-sum l k) (if (null? l) ??? (list-sum (cdr l) ???))) The basic pattern is there, and the missing parts are where the interesting things happen. The … Read more