Khoth comments on Prisoner's Dilemma (with visible source code) Tournament - Less Wrong

47 Post author: AlexMennen 07 June 2013 08:30AM

You are viewing a comment permalink. View the original post to see all comments and the full post content.

Comments (232)

You are viewing a single comment's thread.

Comment author: Khoth 05 June 2013 10:47:50PM *  0 points [-]

I'm trying to work out how scheme in general and racket in particular work.

I installed racket and started it up, and I get a two-pane window. I've noticed that using eval in the REPL thing in the bottom pane works, but if I try using it in the top half I get a cryptic error message:

#lang racket

(eval '(+ 1 1))

gives:

+: unbound identifier;

also, no #%app syntax transformer is bound in: +

Is there some additional magic, or is this something I don't need to worry about? How will a program be run in the competition?

Comment author: AlexMennen 05 June 2013 10:59:37PM 0 points [-]

Racket apparently has terrible namespace conventions. I had the same problem when I tried to use it to interpret a file, but when I type a program directly into the interpreter, eval works fine. I'll either figure out how to get eval to work when I run a file, or I'll just paste people's programs into the interpreter. Either way, assume eval will work properly.

Comment author: Morendil 07 June 2013 05:29:47PM *  3 points [-]

The Guide says:

#lang racket
(define ns (make-base-namespace))
(eval '(cons 1 2) ns) ; works

and indeed it works.

Comment author: nshepperd 01 July 2013 05:34:08PM *  1 point [-]

In both #lang racket and #lang scheme, (eval form) by itself apparently runs form in a basically empty namespace. I've personally been using the following incantation for evaluating anything in the "standard" namespace:

(define (ueval x) (define ns (make-base-namespace)) (eval x ns))

Then (ueval source-code) evaluates source-code in a clean namespace with all the normal builtins, including eval.