Hacker News new | past | comments | ask | show | jobs | submit login
Pong (130 lines in Clojure) (imagine27.com)
46 points by jayded on Sept 13, 2009 | hide | past | favorite | 9 comments



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.)


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.


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


Ugh, the code is ugly :/


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


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.


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.


There were some suggestions posted on the Clojure mailing list: http://groups.google.com/group/clojure/msg/e091a732e9190afb?...


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: