Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Can your REPL do this? (whalliburton.github.com)
119 points by whalliburton on Dec 7, 2011 | hide | past | favorite | 35 comments


Still waiting for a REPL that could what Lisp Machines could do in the early 80s -- namely integrate graphics with object-specific behavior.

http://dspace.mit.edu/handle/1721.1/6946

http://en.wikipedia.org/wiki/Common_Lisp_Interface_Manager

http://www.sts.tu-harburg.de/~r.f.moeller/uims-clim/clim-int...


I think [Racket][1] does this.

[1]: http://racket-lang.org


Here is a direct link to a tutorial that shows off graphics in the Racket REPL: http://docs.racket-lang.org/quick/index.html


There's a listener written with McClim that's easily installable with quicklisp. It's the one captured in the wikipedia article screenshot actually.

(ql:quickload 'clim-listener) (clim-listener:run-listener)


I wish Emacs would provide a canvas like API to draw in buffers. That way integrated graphics could be easily added. This would create a completely new Emacs experience.


There is an Artist Mode for Emacs. The "pictures" are ASCII-esque ;) http://www.cinsk.org/emacs/emacs-artist.html


I know. But for serious application a real drawing capability is needed. This should actually be possible to implement on top of the GTK+ layer.


Do you know if Mathematica does what you're describing? Mathematica functions and calculations can take arbitrary objects as arguments. Example: http://blog.wolfram.com/2008/12/01/the-incredible-convenienc...

And arbitrary objects can take the role of unique values. It's quite convenient, especially considering that Mathematica's language and display system let you put arbitrary expressions anywhere you want (like a 3D plot animation used as the surface texture of a 3D cube).


Why waiting?


Factor's REPL can handle images, colours and fonts:

http://re-factor.blogspot.com/2010/09/visual-repl.html

I've been meaning to write something like Factor's REPL for Clojure, but haven't gotten around to it yet.


Working on it: http://cemerick.com/2011/10/26/enabling-richer-interactions-...

In a heterogeneous mix of tools, getting the channel right is a big part of the challenge. Lots of the interactivity is going to be client-specific (i.e. what's possible / attractive in Eclipse is different from Emacs/vim/TextMate), but the channel underneath is a big enabler.

Would love to hear what you have in mind specifically, if only to see if there's a vector I'm not considering that I should be.


I was thinking of using a browser, as you'd get images, tables and so forth for free. The Ace code editor could be used for the prompt, which would provide syntax highlighting and indent rules for the prompt.


Also animations. Pretty easy to do with swing-based repls, not so sure with others.


I don't get this. Someone wrote a bunch of cute Lisp functions that use Unicode and put them on a webpage?


Yes, it was pretty artistic as far as programs linked on Hacker News go, but technically... it was just a bunch of functions and macros which produced formatted strings.

Not that it's bad on itself, but the title suggested otherwise.


Agreed. This has little to do with what their repl can do and is mostly a bunch of functions with their output.


It's "pretty" and "clever", not actually useful to actual human beings. You know how nerds can be, sometimes.


I didn't find a decent/direct way to get to the code itself. This seems to be the repository that is mentioned/used in that text:

https://github.com/whalliburton/academy

Edit: And someone who likes dead prez I certainly got a kick out of the hexagram examples. Haven't seen those for a while.

https://en.wikipedia.org/wiki/Dead_Prez


Yes. It was called BASIC and it came with my IBM PC XT in 1985.


Somebody showed me some shit Mathematica can do (by way of embedding images and live representations of data) that goes way beyond this and any other Lisp REPL I've seen, so let's not get too smug.

On another note, it's a pleasure to see a bit of the I Ching in there - in the classic Wilhelm/Baynes edition, no less. It is one of the greatest works of civilization. (As for Wilhelm/Baynes: how a translation of a translation could have turned out so well is a mystery. Putting it beside any other I Ching in English is like comparing a Monet to a daguerreotype.)


I rarely use the REPL directly in Lisp anymore, I use the Superior Lisp Interaction Mode for Emacs, better known as SLIME. emacs had a project running for a while for video editing. It also has a working google maps embedding. I'm sure with appropriate whacking I could intertwine it with a Lisp listener instead of my IDE.


Slime is a Lisp REPL. It's the one I was thinking of. Yes, people have dabbled around the edges adding images and other things that Emacs can do. But that isn't the same thing as a REPL designed with data visualization in mind. Lisp is not the state of the art here.


Granted.

To be 100% honest, I'm not sure why a programming language REPL needs to have full data visualization. I may not fully get the idea of REPLs, but it would seem to me that that would be the responsibility of a layer above it to manage data presentation; sophisticated data I would consider to require a domain-specific viewer anyway.


I agree with you there, so I guess what I want is a REPL that has hooks for custom printers, i.e to display an object of type X my way instead of the usual way. I'd like "printing" to optionally include graphics or whatever else makes for a good display of that data. And I'd like the representation to be interactive, so that one can drill down into sub-data or whatever else is appropriate. That too (obviously) is the responsibility of the custom printer, not the REPL itself, but I wish the REPL would make it easy to build such extensions. Little domain-specific visualizers.

Why? Well, some programs rely heavily on specific data structures that may not be very easy to interact with if you print them out as generic lists or hashtables or whatever. The Slime Inspector is next to useless for things of any complexity.


I present to you print-object, a generic function in Common Lisp.

http://clhs.lisp.se/Body/f_pr_obj.htm

So say you have a object type FOO, you can do this:

    (defmethod print-object ((obj FOO) stream)
      ...)
Now, when you have a FOO on the repl, print-object will be called.

Obviously it doesn't provide a drilldown approach and any number of nifty and useful functions.


Well I learned something new. SBCL and CLISP seem to have good unicode support that work well with emacs+slime.



Just to make sure I understand: in "Can your REPL do this?" the word "this" refers to printing Unicode characters, right?


DrRacket's REPL supports image literals. The racket language also includes functions for manipulating these. Take a look at this program: http://img13.imageshack.us/img13/6493/drracket.jpg

In the "Definitions" pane at the top, we define three variables, bruce-lee, energy-blast, and terrible-accident. In the "Interations" pane at the bottom (here's the REPL), we compose them together.


(let ((i0 (parse-integer "4DF0" :radix 16))) (loop for i from i0 to (+ i0 300) do (princ (string (code-char i))))) ䷰䷱䷲䷳䷴䷵䷶䷷䷸䷹䷺䷻䷼䷽䷾䷿一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟丠両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿乀乁乂乃乄久乆乇么义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘亙亚些亜亝亞亟亠亡亢亣交亥亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿什仁仂仃仄仅仆仇仈仉今介仌仍从仏仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟仠仡仢代令以仦仧仨仩仪仫们仭仮仯仰仱仲仳仴仵件价仸仹仺任仼份仾仿伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐休伒伓伔伕伖众优伙会伛伜 NIL


#x4DF0


https://github.com/whalliburton/academy

Since there's no link to the actual repo in that document.


This is actually pretty cool. Shame about the title.


Wow. TRS-80 graphics.


To run the demos from SBCL: (require 'asdf) (asdf:operate 'asdf:load-op 'academy) (in-package :academy) (help)




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

Search: