

Pong (130 lines in Clojure) - jayded
http://jng.imagine27.com/articles/2009-09-12-122605_pong_in_clojure.html

======
llimllib
In python, 30 lines: <http://billmill.org/pong.html>

(edit: I just mean to offer for comparison to this program, not in some sort
of macho programming-language pissing contest sense.)

~~~
swannodette
Of course this isn't much of a comparison at all :) You're using NodeBox to
abstract away much of the pain of event handling and drawing to the screen. A
more interesting and fair comparison would be something like using wxPython +
pycairo.

------
cubicle67
Interestingly, the original as written in zero lines of code (It was
'programmed' as a ttl logic circuit)

------
omouse
Ugh, the code is ugly :/

~~~
francoisdevlin
It could be cleaned up some, but due to all the awt interaction, it needs to
be that way.

~~~
arb
It's unnecessarily ugly.

There's a lot of unnecessary state, where refs are initialized to nil, then
only updated to a fixed value. There's side effects in transactions (mostly
around the Timer). Not one function is defined with parameters, which ought to
raise alarms. The flow resembles Java code rewritten in Clojure, rather than a
functional Clojure program.

Besides that, much of the code is either non-idiomatic or primitive: the 'ns'
macro should be used instead of 'import'; 'alter' can be better than 'ref-
set'; 'when' is better than 'if' without an else form; the proxy identation is
wrong.

The AWT/Swing interaction is excusable, as is the poor readability given the
brevity constraint for this exercise, but there are still some elementary
problems.

~~~
spuz
I'm trying to learn Clojure at the moment and pong seems like a decent real
world example program to learn from. I'd love to see this code rewritten
'properly' with all these suggested improvements.

~~~
tsally
There were some suggestions posted on the Clojure mailing list:
[http://groups.google.com/group/clojure/msg/e091a732e9190afb?...](http://groups.google.com/group/clojure/msg/e091a732e9190afb?hl=en)

------
jcw
Just today I was tinkering with dreamscheme and its SDL hooks, thinking about
writing a pong clone, wondering if it would gain any attention after Haskell
pong has.

