00:00:28 ToxicFrog [~ToxicFrog@24-246-40-169.cable.teksavvy.com] has joined #scheme 00:01:39 ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 00:01:45 -!- kennyd [~kennyd@93-141-90-10.adsl.net.t-com.hr] has quit [Read error: Connection reset by peer] 00:03:30 kennyd_ [~kennyd@93-141-90-10.adsl.net.t-com.hr] has joined #scheme 00:03:30 cafesofie_ [~cafesofie@ool-18b97779.dyn.optonline.net] has joined #scheme 00:03:30 -!- cafesofie [~cafesofie@ool-18b97779.dyn.optonline.net] has quit [Disconnected by services] 00:03:30 -!- cafesofie_ is now known as cafesofie 00:03:41 -!- cafesofie [~cafesofie@ool-18b97779.dyn.optonline.net] has quit [Client Quit] 00:03:53 -!- Nisstyre [~nisstyre@109.74.204.224] has quit [Ping timeout: 252 seconds] 00:04:17 -!- pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has quit [Max SendQ exceeded] 00:04:29 cafesofie [~cafesofie@ool-18b97779.dyn.optonline.net] has joined #scheme 00:05:55 -!- wtetzner [~wtetzner@c-174-62-239-154.hsd1.ma.comcast.net] has quit [Ping timeout: 255 seconds] 00:07:03 Nisstyre [~nisstyre@109.74.204.224] has joined #scheme 00:09:03 -!- ToxicFrog [~ToxicFrog@24-246-40-169.cable.teksavvy.com] has quit [Ping timeout: 255 seconds] 00:12:03 pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has joined #scheme 00:18:09 -!- pygospa [~TheRealPy@kiel-d9bfd5f4.pool.mediaWays.net] has quit [Disconnected by services] 00:18:20 pygospa [~TheRealPy@kiel-5f77b747.pool.mediaWays.net] has joined #scheme 00:22:28 wtetzner [~wtetzner@c-174-62-239-154.hsd1.ma.comcast.net] has joined #scheme 00:22:48 ToxicFrog [~ToxicFrog@24-246-40-169.cable.teksavvy.com] has joined #scheme 00:24:53 -!- ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has quit [Remote host closed the connection] 00:25:21 -!- acarrico [~acarrico@pppoe-68-142-35-144.gmavt.net] has quit [Ping timeout: 250 seconds] 00:34:23 dfeuer [~dfeuer@pool-71-178-51-188.washdc.fios.verizon.net] has joined #scheme 00:34:32 -!- dfeuer [~dfeuer@pool-71-178-51-188.washdc.fios.verizon.net] has quit [Changing host] 00:34:32 dfeuer [~dfeuer@wikimedia/Dfeuer] has joined #scheme 00:34:43 acarrico [~acarrico@pppoe-68-142-35-144.gmavt.net] has joined #scheme 00:35:37 -!- tricus [~tricus@h69-130-142-158.cncrtn.dsl.dynamic.tds.net] has quit [Remote host closed the connection] 00:46:03 -!- rotty_ [~rotty@nncmain.nicenamecrew.com] has quit [Read error: Operation timed out] 00:47:54 rotty [~rotty@nncmain.nicenamecrew.com] has joined #scheme 00:47:54 -!- incubot [incubot@klutometis.wikitex.org] has quit [Read error: Connection reset by peer] 00:47:54 -!- docgnome` [~docgnome@web169.webfaction.com] has quit [Ping timeout: 240 seconds] 00:47:54 mario-go` [~user@67.205.85.241] has joined #scheme 00:47:54 docgnome [~docgnome@web169.webfaction.com] has joined #scheme 00:47:54 zmv [~daniel@c95315ce.virtua.com.br] has joined #scheme 00:47:57 incubot [incubot@klutometis.wikitex.org] has joined #scheme 00:48:03 -!- ohwow [~oh@www.nig.gs] has quit [Ping timeout: 240 seconds] 00:48:08 ohwow [~oh@www.nig.gs] has joined #scheme 00:48:27 -!- mario-goulart [~user@67.205.85.241] has quit [Ping timeout: 240 seconds] 00:49:18 -!- copumpkin [~pumpkin@unaffiliated/pumpkingod] has quit [Read error: Connection reset by peer] 00:58:12 -!- bgs100 [~ian@h118.103.187.173.dynamic.ip.windstream.net] has quit [Changing host] 00:58:12 bgs100 [~ian@unaffiliated/bgs100] has joined #scheme 01:06:25 -!- mario-go` is now known as mario-goulart 01:17:40 -!- pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has quit [Quit: Leaving.] 01:18:29 -!- ckrailo [~ckrailo@208.86.167.249] has quit [Quit: Computer has gone to sleep.] 01:24:18 jcowan [~John@cpe-74-68-112-189.nyc.res.rr.com] has joined #scheme 01:25:02 kilimanjaro [~kilimanja@unaffiliated/kilimanjaro] has joined #scheme 01:31:01 gienah [~mwright@ppp121-44-237-46.lns20.syd7.internode.on.net] has joined #scheme 01:36:39 rpg [~rpg@216.243.156.16.real-time.com] has joined #scheme 01:39:41 -!- entrix [~entrix@95-25-57-247.broadband.corbina.ru] has quit [Ping timeout: 240 seconds] 01:42:28 pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has joined #scheme 01:43:41 -!- pyrony [~epic@office1.klout.com] has quit [Ping timeout: 276 seconds] 01:43:48 denom [~denom@66-168-19-20.dhcp.mdsn.wi.charter.com] has joined #scheme 01:46:54 -!- pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has quit [Client Quit] 01:55:23 entrix [~entrix@95-28-76-87.broadband.corbina.ru] has joined #scheme 02:01:42 -!- inquest12 [~dbaweja@65.95.15.112] has quit [Ping timeout: 276 seconds] 02:03:44 copumpkin [~pumpkin@unaffiliated/pumpkingod] has joined #scheme 02:04:50 pyrony [~epic@174-144-239-239.pools.spcsdns.net] has joined #scheme 02:23:09 -!- kniu [~kniu@pool-96-250-3-60.nycmny.fios.verizon.net] has quit [Ping timeout: 255 seconds] 02:23:56 -!- danking_ is now known as danking 02:28:15 I'm curious, is constant stack size the only advantage of optimizing tail calls? Is there any speed advantage from returning directly from the end of a series of function calls? 02:28:36 s/there any/there any appreciable/ 02:31:16 danking: Usually, proper tail recursion isn't thought of as an "optimisation" in Scheme. 02:31:43 danking: It's seen as an essential property of Scheme so that looping is possible. 02:32:20 danking: Remember that (short of using continuations, and using that for loops is ick ick ick) all looping in Scheme is done using tail calls. 02:33:33 cky: Right, but, if tail calls _were_ allowed to grow the stack, would there be a hit to execution time? 02:33:53 An appreciable one anyway. 02:34:10 Since you would probably run out of memory almost immediately, yeah: your program would fail almost immediately. 02:35:12 Riastradh++ 02:35:40 I guess, practically speaking, its not really a valid question due to the adverse side effects of growing the stack too large. 02:35:48 Right. 02:38:13 Proper tail recursion, by the way, is weaker than what Scheme implementations really ought to guarantee. You can read more about it in Will Clinger's paper `Proper tail recursion and space efficiency'. 02:38:26 (or `and space complexity'? I forget) 02:39:49 -!- pyrony [~epic@174-144-239-239.pools.spcsdns.net] has quit [Ping timeout: 260 seconds] 02:40:03 kniu [~kniu@pool-96-250-3-60.nycmny.fios.verizon.net] has joined #scheme 02:44:33 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Ping timeout: 264 seconds] 02:47:05 *cky* has that document loaded up now. Will read it in Copious Free Time. danking should read it now. Immediately. 02:47:05 -!- zmv [~daniel@c95315ce.virtua.com.br] has quit [Quit: sleep] 02:54:39 -!- carleastlund [~cce@gotham.ccs.neu.edu] has quit [Quit: carleastlund] 03:04:43 -!- elliottcable is now known as ec|detached 03:06:53 -!- _p4bl0 [~user@berthold.shebang.ws] has quit [Read error: Connection reset by peer] 03:07:01 _p4bl0` [~user@berthold.shebang.ws] has joined #scheme 03:09:19 srid_ [~srid@S010678ca39ff0146.vn.shawcable.net] has joined #scheme 03:09:19 -!- srid_ [~srid@S010678ca39ff0146.vn.shawcable.net] has quit [Changing host] 03:09:19 srid_ [~srid@unaffiliated/srid] has joined #scheme 03:09:34 -!- srid_ [~srid@unaffiliated/srid] has quit [Client Quit] 03:11:37 jeapostrophe [~jay@static-74-40-137-134.dr01.crth.il.frontiernet.net] has joined #scheme 03:12:21 danking: The implementation is only required to provide asymptotic linear space complexity. 03:12:33 e.g. Chicken, which does its tail recursion "in a bunch" rather than call by call. 03:15:45 -!- MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has quit [Ping timeout: 258 seconds] 03:19:27 inquest12 [~dbaweja@65.95.15.112] has joined #scheme 03:19:51 -!- bgs100 [~ian@unaffiliated/bgs100] has quit [Ping timeout: 255 seconds] 03:30:29 pyrony [~epic@99-105-56-162.lightspeed.sntcca.sbcglobal.net] has joined #scheme 03:30:42 The `f' in `setf' isn't analogous to the `!' in `set!' in the same way that the `p' in e.g. `stringp' is analogous to the `?' in `string?', is it? 03:31:33 Guess not: . 03:31:39 klutometis: No, not at all 03:32:52 klutometis: There is no CL analogue to !. Case in point: rplaca, rplacd. 03:32:58 bgs100 [~ian@unaffiliated/bgs100] has joined #scheme 03:33:10 jcowan: Indeed; it's bizarre to me how learning CLISP after Scheme feels like archaeology. 03:33:37 Scheme names were rationalized before R2RS, whereas CL names never were with some trivial exceptions 03:34:27 CLISP? 03:34:51 The CL implementation, I presume. 03:35:22 *cky* has been guilty of referring to SML as SMLNJ until I realised the latter is an implementation of the former. *facepalm* 03:35:27 Riastradh: Sorry; trying to distinguish Common Lisp from Scheme. 03:35:42 SBCL is actually the implementation in question. 03:36:03 CL is the usual abbreviation for the name of the language 03:36:07 Ah, right. 03:36:58 I have been reading up on Wraith Scheme, which is very interesting from a historical perspective. It is a living fossil in some ways. 03:37:04 nconc ftw! 03:37:12 foof: :-) 03:37:23 e.g. it uses cdr-coded lists, and its GC not only maintains but constructs them. 03:37:32 foof: Yet another example of a ! function, thus demonstrating that CL doesn't have analogue for !. 03:37:49 (Right? I haven't used CL enough to remember if nconc is mutating.) 03:38:05 Yes it is; it is append!. 03:38:10 Excellent. 03:39:00 One can't even say that an N-prefix signifies !, given the rplaca/rplacd example listed above. 03:39:27 I like how it mentionds that "the lists are modified rather than copied" in the last 5/6ths of the page: . 03:39:48 Jesus, what am I getting myself into? 03:40:07 What else does "concatenate" mean, really? They just put that note there for the eggheads. 03:40:16 klutometis, you might notice the relation (nconc list-1 list-2) == (progn (rplacd (last list-1) list-2) list-1). 03:40:24 Jafet: It could also mean what SRFI 1 concatenate means. :-) 03:40:52 Well, they actually describe the semantics in the "Examples" section. 03:40:56 And the remark in the examples about X changing because its last cons has been RPLACD'd. 03:42:36 Riastradh: True; it looks like I might have to learn CL in a depth-first fashion, understanding e.g. RPLACD before NCONC. 03:43:01 klutometis: RPLACD is easy. It's called set-cdr! in Scheme. 03:43:03 RPLACD is 1960ese for SET-CDR!. 03:44:01 Yes, RPLACA is archeology. Modern CL programmers use (setf car). 03:44:09 as in: (setf (car x) v) 03:44:26 I always wondered whether RPLACD means RePLAce CDr, or RePLACe cDr. The way I pronounce it (ar-plack-d) wants to choose the latter interpretation, but I suspect the former is more likely. 03:44:35 (I suspect that I'll come away from this CL-fling with a deeper love for Scheme.) 03:45:05 *foof* forgot CL `last' is Scheme `last-pair' 03:45:15 Why not pronounce it "RePLAce CDr"? (though I'm not sure how mix-caps should be pronounced) 03:45:25 And of course you should certainly learn LET/LET* (which you mostly already know), TAGBODY, and BLOCK before undertaking to master PROG/PROG*. 03:45:49 incubot: progv 03:45:50 Jafet: For the same reason I'd pronounce nconc as en-konk, not non-consing concatenation. ;-) 03:45:52 I could be wrong, but Verizon is the source and sink of all of the evil in the world and is, even more than PROGV, the indisputable work of Satan. 03:46:02 minion: progv 03:46:08 progv is not really so evil 03:46:33 dangit, what happened to sarahbot's rant? 03:46:35 You could easily write progv on top of SRFI 39 03:47:04 incubot: tagbody 03:47:07 So to continue my dissertation on conditions, what I realized today is that signaling a condition is, for ISLisp, establishing a fourth kind of control point (besides BLOCK, TAGBODY, and CATCH). 03:47:07 Funny how you have to write primitives on top of libraries in scheme... 03:47:23 Gak, it's quoting me! 03:47:39 Is `non-consing' roughly synonymous with `destructive'; or are they orthogonal? 03:47:42 "Primitive" is a relative term. 03:48:17 non-consing means that no new conses are, er, consed. That generally means some old ones must be reused, unless the operation is inherently non-destructive. 03:48:47 SRFI 1 uses a different approach, functions are "linear-update", in which case they are entitled to cannibalize their arguments, or else not. 03:49:08 Notice however that in CL, non-consing is (almost) always optional. 03:49:18 It does not follow that every l-u function cannibalizes. In chibi's SRFI-1 library, e.g., append! just calls append. 03:49:25 Most N* functions can be implemented just like their non N- counterpart. 03:49:33 -!- evhan [~evhan@unaffiliated/evhan] has quit [Quit: leaving] 03:49:39 Great minds think alike 03:49:56 In some Lisps, IF is built on top of primitive COND. 03:50:12 evhan [~evhan@unaffiliated/evhan] has joined #scheme 03:50:25 Whereas in Scheme, IF is the primitive and COND is a macro atop it. :-) 03:50:28 pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has joined #scheme 03:50:58 At least that's how it's specified in R5RS anyway. I guess implementations are at liberty to do it the other way around. (...right?) 03:51:22 cky: According to the definition, yes. But you are not required to implement it that way, because (unlike CL) there is no programmatic accdess to macro expansion, and no guarantee about which functions are primitive. 03:51:37 In CL, while IF is specified as a special operator, and COND as a macro, any special operator can be implemented as a macro, and any macro can be implemented as a special operator (as long as the macro function is still provided). 03:51:41 Cool. 03:52:36 IMHO the biggest difference between CL and Scheme is that CL guarantees a great deal of dynamicness, much more than R5RS actually requires, still less R4RS (though most implementations actually do provide it) 03:53:00 So in CL, you could have: (defmacro if (te th el) `(system:if te (lambda () th) (lambda () el))) with system:if being a function. 03:53:37 Though not a function written in CL. 03:53:46 jcowan: why not? 03:53:48 -!- jeapostrophe [~jay@static-74-40-137-134.dr01.crth.il.frontiernet.net] has quit [Quit: jeapostrophe] 03:53:59 jcowan: it really depends on the representation of booleans. 03:54:38 pjb: How would system:if implement the branching? 03:54:50 You could (defun system:if (te th el) (funcall (get 'system:then-else (not te)) th el)) 03:54:52 i.e., how would system:if decide to evaluate only one of the given lambdas, and not the other? 03:55:17 with (setf (get 'system:then-else 'nil) (lambda (th el) (funcall th))) 03:55:22 and (setf (get 'system:then-else 't) (lambda (th el) (funcall el))) 03:55:31 Fair enough. 03:55:33 -!- MichaelRaskin [~MichaelRa@195.91.224.225] has quit [Ping timeout: 244 seconds] 03:55:39 (there's a if hidden in get however). 03:55:43 Exactly. 03:55:50 (Re the "get" needing to branch.) 03:56:13 That's similar to the Smalltalk technique, where ifTrue: and ifFalse: are implemented differently in the classes True and False, both of which are singletons. 03:56:31 yes, with a if hidden in the dispatch. 03:56:37 Right. 03:57:05 We could do that with clos: (defmethod if ((te (eql nil)) th el) (funcall el)) (defmethod if ((te t) th el) (funcall th)) 03:58:39 Is it normal in CL programming to add methods to generic functions in other packages? 03:59:36 jcowan: Well, it would depend on the design of the library, but yes, it can be done normally. 03:59:48 jcowan: for example, it's usual to add method to CL:PRINT-OBJECT. 03:59:57 *jcowan* nods. 03:59:59 Thanks. 04:00:36 also, with :after and :before method, you can do some nice trick, decorating existing generic functions (for debugging or other nice effects). 04:10:21 samth_ [~samth@c-24-128-51-63.hsd1.ma.comcast.net] has joined #scheme 04:10:57 -!- astertronistic [~astertron@ip70-181-197-230.sd.sd.cox.net] has quit [Ping timeout: 258 seconds] 04:12:54 MichaelRaskin [~MichaelRa@195.178.216.22] has joined #scheme 04:17:04 araujo [~araujo@190.73.44.29] has joined #scheme 04:17:04 -!- araujo [~araujo@190.73.44.29] has quit [Changing host] 04:17:04 araujo [~araujo@gentoo/developer/araujo] has joined #scheme 04:22:37 -!- jcowan [~John@cpe-74-68-112-189.nyc.res.rr.com] has quit [Quit: Leaving] 04:33:42 -!- cafesofie [~cafesofie@ool-18b97779.dyn.optonline.net] has quit [Remote host closed the connection] 04:34:56 bokr [~eduska@109.110.36.68] has joined #scheme 04:36:48 -!- samth_ [~samth@c-24-128-51-63.hsd1.ma.comcast.net] has quit [Ping timeout: 255 seconds] 04:43:19 -!- pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has quit [Quit: Leaving.] 04:44:32 dnolen [~davidnole@184.152.69.75] has joined #scheme 04:47:02 theratking862 [~theratkin@pool-173-48-130-251.bstnma.fios.verizon.net] has joined #scheme 04:52:36 -!- theratking862 [~theratkin@pool-173-48-130-251.bstnma.fios.verizon.net] has quit [Quit: theratking862] 04:52:53 theratking862 [~theratkin@pool-173-48-130-251.bstnma.fios.verizon.net] has joined #scheme 05:01:10 -!- kilimanjaro [~kilimanja@unaffiliated/kilimanjaro] has quit [Ping timeout: 244 seconds] 05:02:48 -!- dnolen [~davidnole@184.152.69.75] has quit [Quit: dnolen] 05:04:50 ckrailo [~ckrailo@pool-173-57-102-171.dllstx.fios.verizon.net] has joined #scheme 05:21:19 astertronistic [~astertron@ip70-181-197-230.sd.sd.cox.net] has joined #scheme 05:31:22 -!- denom [~denom@66-168-19-20.dhcp.mdsn.wi.charter.com] has quit [Quit: Leaving] 05:32:34 -!- bgs100 [~ian@unaffiliated/bgs100] has quit [Quit: awwwaaaaay] 06:00:47 -!- Nisstyre [~nisstyre@109.74.204.224] has quit [Remote host closed the connection] 06:05:04 Nisstyre [~nisstyre@109.74.204.224] has joined #scheme 06:08:12 -!- alfa_y_omega [~alfa_y_om@90.166.231.220] has quit [Read error: Operation timed out] 06:08:13 -!- blueadept [~blueadept@unaffiliated/blueadept] has quit [Quit: Leaving] 06:09:17 -!- aisa [~aisa@c-68-35-164-105.hsd1.nm.comcast.net] has quit [Quit: aisa] 06:15:59 -!- ckrailo [~ckrailo@pool-173-57-102-171.dllstx.fios.verizon.net] has quit [Quit: Leaving...] 06:40:25 -!- theratking862 [~theratkin@pool-173-48-130-251.bstnma.fios.verizon.net] has quit [Remote host closed the connection] 06:54:29 -!- leppie [~lolcow@196-210-170-119.dynamic.isadsl.co.za] has quit [] 06:57:41 hkBst [~quassel@gentoo/developer/hkbst] has joined #scheme 06:58:39 leppie [~lolcow@196-210-170-119.dynamic.isadsl.co.za] has joined #scheme 07:05:50 -!- monqy [~chap@pool-71-102-217-117.snloca.dsl-w.verizon.net] has quit [Quit: hello] 07:07:06 alfa_y_omega [~alfa_y_om@90.166.231.220] has joined #scheme 07:17:28 ccorn [~ccorn@84-53-64-50.adsl.unet.nl] has joined #scheme 07:20:29 -!- kennyd_ [~kennyd@93-141-90-10.adsl.net.t-com.hr] has quit [Ping timeout: 250 seconds] 07:21:37 kennyd [~kennyd@93-136-83-106.adsl.net.t-com.hr] has joined #scheme 07:33:55 klutometis: Lisp had `set' first, as in (set 'foo 123), then came `setq' as a macro that didn't require to quote the variable (if you can call setting the value slot of a symbol a "variable"...) so it's "set quote", and in that sequence, `setf' can deal with any form, so it's "set form". 07:34:04 IIRC, at least. 07:45:47 jewel [~jewel@196-210-187-4.dynamic.isadsl.co.za] has joined #scheme 07:50:00 Bahman [~bahman@2.144.254.199] has joined #scheme 07:50:35 Hi all! 07:56:22 -!- eli [~eli@winooski.ccs.neu.edu] has quit [Ping timeout: 252 seconds] 08:00:14 -!- Hal9k [~Lernaean@unaffiliated/kusanagi] has quit [Read error: Connection reset by peer] 08:02:17 -!- Leonidas_ is now known as Leonidas 08:02:35 -!- Bahman [~bahman@2.144.254.199] has quit [Quit: Farewell] 08:09:16 Bahman [~bahman@2.144.254.199] has joined #scheme 08:14:43 eli [~eli@winooski.ccs.neu.edu] has joined #scheme 08:16:16 -!- ccorn [~ccorn@84-53-64-50.adsl.unet.nl] has quit [Quit: ccorn] 08:20:08 jewel_ [~jewel@196-210-187-4.dynamic.isadsl.co.za] has joined #scheme 08:26:29 masm [~masm@2.80.159.30] has joined #scheme 08:32:02 -!- Adrinael [~adrinael@barrel.rolli.org] has quit [Read error: Operation timed out] 08:34:29 -!- peterhil [~peterhil@hoasnet-ff04dd00-56.dhcp.inet.fi] has quit [Ping timeout: 250 seconds] 08:41:57 -!- drdo [~drdo@91.205.108.93.rev.vodafone.pt] has quit [Ping timeout: 250 seconds] 08:48:33 jjong [~user@203.246.179.177] has joined #scheme 08:55:23 -!- entrix [~entrix@95-28-76-87.broadband.corbina.ru] has quit [Ping timeout: 258 seconds] 08:56:15 hey 08:58:20 ccorn [~ccorn@84-53-64-50.adsl.unet.nl] has joined #scheme 09:02:51 EbiDK [3e6b7ac3@gateway/web/freenode/ip.62.107.122.195] has joined #scheme 09:03:06 -!- EbiDK [3e6b7ac3@gateway/web/freenode/ip.62.107.122.195] has quit [Client Quit] 09:03:35 EbiDK [3e6b7ac3@gateway/web/freenode/ip.62.107.122.195] has joined #scheme 09:10:54 entrix [~entrix@95-25-240-91.broadband.corbina.ru] has joined #scheme 09:14:36 Modius_ [~Modius@cpe-70-123-140-183.austin.res.rr.com] has joined #scheme 09:17:28 -!- Modius [~Modius@cpe-70-123-140-183.austin.res.rr.com] has quit [Ping timeout: 240 seconds] 09:27:35 -!- astertronistic [~astertron@ip70-181-197-230.sd.sd.cox.net] has quit [Ping timeout: 258 seconds] 09:35:03 Adrinael [~adrinael@barrel.rolli.org] has joined #scheme 09:35:57 -!- jjong [~user@203.246.179.177] has quit [Remote host closed the connection] 09:39:24 stis [~stis@host-90-235-77-23.mobileonline.telia.com] has joined #scheme 09:43:30 DrDuck [~duck@adsl-98-81-138-78.hsv.bellsouth.net] has joined #scheme 09:43:51 ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 09:45:20 -!- inquest12 [~dbaweja@65.95.15.112] has quit [Ping timeout: 276 seconds] 09:49:37 kuribas [~user@94-227-90-188.access.telenet.be] has joined #scheme 09:52:21 huh foobar2000 uses scheme? 09:52:26 http://www.fooblog2000.com/2007-04/playlist-tree-and-the-art-of-the-query 09:52:34 gravicappa [~gravicapp@80.90.116.82] has joined #scheme 10:06:08 f8l [~f8l@77-253-17-75.adsl.inetia.pl] has joined #scheme 10:08:04 -!- DrDuck [~duck@adsl-98-81-138-78.hsv.bellsouth.net] has quit [Ping timeout: 244 seconds] 10:18:40 MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has joined #scheme 10:57:57 -!- jewel_ [~jewel@196-210-187-4.dynamic.isadsl.co.za] has quit [Ping timeout: 255 seconds] 10:58:13 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Remote host closed the connection] 10:58:24 -!- jewel [~jewel@196-210-187-4.dynamic.isadsl.co.za] has quit [Ping timeout: 255 seconds] 10:59:19 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 11:06:21 Arafangion [~arafangio@220-244-108-23.static.tpgi.com.au] has joined #scheme 11:07:13 Is it feasible to use Scheme as a kind of generic DSL? I'm thinking that it might be worthwhile for me to write my portable programs in a DSL that is then executed, with the output in the desired target langauge. 11:08:02 -!- _p4bl0` is now known as _p4bl0 11:08:50 -!- em [~em@unaffiliated/emma] has quit [Ping timeout: 260 seconds] 11:09:12 In effect, I'm thinking that it would be similar to Scala or Wasabi. 11:09:18 (In use case) 11:09:51 -!- f8l [~f8l@77-253-17-75.adsl.inetia.pl] has quit [Quit: WeeChat 0.3.5] 11:11:37 em [~em@unaffiliated/emma] has joined #scheme 11:29:20 tupi [~david@189.60.161.65] has joined #scheme 11:29:21 jeapostrophe [~jay@static-74-40-137-134.dr01.crth.il.frontiernet.net] has joined #scheme 11:39:13 ijp` [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 11:39:13 -!- ijp` [~user@host109-153-23-149.range109-153.btcentralplus.com] has quit [Client Quit] 11:41:46 -!- ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has quit [Ping timeout: 250 seconds] 11:51:43 Arafangion: lisp and scheme are ideal to write DSL. You couldn't make a better choice. 11:52:55 pjb: Currently idly thinking about it. I haven't actually done any lisp and scheme, but from what I've read, I suspect that a scheme that includes lisp's macros would be the best solution for me, however, I'm trying to find out if it's "feasible". 11:53:40 pjb: The vast majority say "No", that it's better to just implement a VM and port that VM everywhere... But that seems problematic for me (Eg, I might wnat to output to a subset of Java, to run on Android). 11:54:35 Concern with implemetnation would be the semantics mismatch, and type safety. I've no idea how I might approach type safety in such a lisp system. (I very much like inferred typing) 11:54:56 If type inferrence is not possible, I'm comfortable with dynamic typing, but NOT weak typing. 11:55:31 Arafangion: What's dynamic typing vs "weak typing"? Where do you draw the line? 11:55:49 cky: If you can query the object to find out it's type, then it's dynamically typed, imho. 11:56:42 Arafangion: Well, in that case no modern language is "weakly typed" (in the sense of everything being automagically coerced), with the possible exception of Perl and PHP. :-P 11:56:52 And C. 11:57:28 ObjC is also, imho, weakly typed, although the ObjC extensions to C are arguably dynamically typed. 11:57:40 (Ie, actual ObjC objects seem to have a type) 11:59:41 My motivation, really, is that I am looking for something that lets me use a variety of widely varying libraries, while keeping the bulk of my code in a portable, common language rather than writing new code for each platform. 11:59:54 With a background in enterprise software. :( 12:00:49 And I'm not happy with C++. :) 12:01:08 Lisp is a staticly typed language where every variable has a type of T. 12:01:14 don't remember who said that :( 12:01:32 ohwow: I can't imagine that to be the case. 12:01:40 ohwow: Do you have more context? 12:01:55 about what? 12:02:05 Lisp being statically typed. 12:02:35 replore_ [~replore@ntkngw256114.kngw.nt.ftth.ppp.infoweb.ne.jp] has joined #scheme 12:02:41 ohwow: that is completely true 12:02:48 T is just a union of all potential types out there :) 12:02:53 making it a really crappy type 12:03:26 Arafangion: that was a joke-ish quote by some guy from CL community + what poucet said 12:03:34 ohwow: Ah, makes sense. :) 12:03:59 ohwow: I would argue, however, if the code doesn't exist at compile time, then it's not static. 12:07:36 samth_ [~samth@c-24-128-51-63.hsd1.ma.comcast.net] has joined #scheme 12:08:11 Incidentally, scheme's been on my 'list of languages to actually try out', which makes me wonder - what's the status of libraries in Scheme? 12:08:34 I realise it's easy to write whatever code is neccessary, but enterprise code is just *complicated*. (See SOAP). 12:10:49 -!- stis [~stis@host-90-235-77-23.mobileonline.telia.com] has quit [Remote host closed the connection] 12:15:10 Arafangion: I don't think there are many enterprisey libraries for Scheme, simply because I don't think Scheme is used in the enterprise all that much. 12:15:13 I'm using chicken scheme, is there a way to make the REPL console human? you don't have history, you can't even move the cursor in the console 12:15:27 rostayob: chicken-install readline 12:15:53 Arafangion: perhaps for enterprise software Common Lisp would be more advisable (not that you cannot use scheme, it's good too). Perhaps you could read: http://www.gigamonkeys.com/book/ 12:16:31 pjb: Thanks for the suggestion. I confess I've yet to realise just what the fundamental differences between CL and Scheme are (Right now, I think "Scheme's a tiny version of CL". 12:16:31 Arafangion: What pjb said---CL is used more in the enterprise and there'd be more pre-existing libraries for that. 12:16:55 Arafangion: No no no, Scheme isn't "a tiny version of CL". They're very different languages. :-) 12:17:19 Their intersection is not empty, but it's smallish. 12:17:20 cky: So, either I delegate CL/Scheme to "Something to use as a fun language for pet projects", or I consider how to tie it to enterprise setups using some form of bridging. 12:17:29 cky: I'm aware of that. ;) 12:17:39 Arafangion: clojure is a lisp that is used in the real world as well 12:17:58 But there's a single implementation, no standard, it's moving fast under your feet... 12:18:07 rostayob: Whether Clojure is Lispy enough to count as a Lisp is a subject of debate. ;-) 12:18:20 Yeah, having a moving target is a discouragement for me. 12:18:34 As is relying on Java VM's. 12:18:39 cky: i think that clojure can be safely called a lisp 12:18:52 I can't assume that I have a Java VM. 12:19:01 rostayob: but it uses vectors for parts of its source sexps... 12:19:49 rostayob: It departs from Lisp in many ways, some of which could be considered significant. I guess it depends on where you draw the line. 12:20:26 pjb, cky: fair enough, but if Arafangion wants to learn a dynamic fpl, than clojure is a good option 12:20:28 Arafangion: as for type inference, there are CL compilers that implement it to provide good optimization (eg CMUCL and SBCL). And of course, when you implement your own DSL, you can also implement your own type inference for your own DSL purposes. 12:20:41 Clojure's yet another interesting language, I'll have to put that on my list, as well. 12:21:16 Arafangion: if you want to learn functional programming in general, I'd suggest haskell more than lisp :P 12:21:23 rostayob: since you're using Chicken, maybe #chicken may be of your interest 12:21:50 rostayob: I like the idea of functional programming, but as yet, I'm not interested in pure functional langauges. 12:22:01 Arafangion: why not? 12:22:11 mario-goulart: oh thanks 12:22:37 rostayob: I would need too many monads. 12:22:54 Arafangion: ahah monads are cool 12:23:13 if you say so. :) 12:23:27 At work my favorite language is C#, actually. 12:23:45 Arafangion: monads in emacs lisp (same in CL): http://dorophone.blogspot.com/2011/04/deep-emacs-part-1.html 12:24:02 I've never used emacs! 12:24:21 Well, it's useful for lisp or scheme programming. 12:24:38 I've heard that. 12:24:47 I'm a vim user, for better or worse. 12:24:48 Arafangion: I mean monads make imperative programming pure :D 12:24:54 Arafangion: AFAIK, there's no CL implementation working on C# VM. IIRC, there are one or two scheme on C# VM. 12:25:17 rostayob: do you realize that CLOS method combinations are monads? 12:25:34 pjb: I don't know much about lisp, sorry 12:25:52 pjb: Why is there no CL on the CLR? 12:25:53 I'm mostly a haskell programmer I just started looking at scheme 12:25:56 rostayob: no, just to say, that CL already includes monads... 12:25:58 kind of. 12:26:13 Arafangion: lispers are not often MS-Windows programmers :-) 12:26:18 pjb: Incidentally, I'm more intruged by the notion of essentially generating C# from scheme. 12:26:35 if you are referring to these http://en.wikipedia.org/wiki/Common_Lisp_Object_System they don't sound like monads at all 12:26:39 wingo [~wingo@90.164.198.39] has joined #scheme 12:27:25 pjb: Heh, yeah, it seems that on windows, it has to be C# or death. 12:27:59 i mean a monad is simply a type that contains something that can be binded 12:28:16 "binded"? 12:29:13 yes, in short you provide a function that modifies the inner type 12:29:37 but i mean it's a really simple concept and it doesn't share much with OO 12:30:16 rostayob: I find OO increasonly hard to define. 12:30:38 Arafangion: well then there you go, monads on the other hand are extremely simple to define formally :D 12:30:52 Ha. What's a good description? 12:31:18 rostayob: read the blog about emacs monads. You can define method combinations such as +, or list, or whatever, which indicates how the results of the various methods invoked by a generic function call are to be combined. This is just like monads. Only the restriction being that it applies just to method invoked by the same generic function call... 12:31:46 Arafangion: emacs blog above. 12:31:47 pjb: I'm sure you can do monads in lisp, as you can do them in most languages, it's just that they're nicer in haskell 12:31:52 Arafangion: monads in emacs lisp (same in CL): http://dorophone.blogspot.com/2011/04/deep-emacs-part-1.html 12:32:11 pjb: Currently reading that. :) 12:32:15 Arafangion: formally a monads is a functor with "bind" and "return", but that won't be of much use 12:32:36 rostayob: So it's something you supply a continuation to? 12:33:04 Arafangion: no 12:33:41 Arafangion: the simplest way to understand monads is with the Maybe monad imho 12:34:14 return is a more like "wrap", and bind is unwrap and apply iirc 12:34:58 bremner: yeah with return you lift a value into the monad type, bind transforms the monad, you don't necessarly unwrap anything 12:35:02 most of the times yes 12:35:25 Arafangion: http://learnyouahaskell.com/a-fistful-of-monads#getting-our-feet-wet-with-maybe if you are interested (: 12:35:34 http://tinyurl.com/3fl6v2g 12:37:44 all you need to know about bind is its type ;). (>>=) :: (Monad m) => m a -> (a -> m b) -> m b 12:37:53 bremner: yes 12:38:14 but I can't assume that everyone is familiar with haskell types 12:38:15 So far it seems similar to how I do dependency injection in C#. 12:38:35 pjb: (I"m up to the 'friends-db' section in that website) 12:41:17 rostayob: GEB destroy types in the beginning of its first chapter. People, you could have spared the work on Haskell, GEB has been published in the late 70s! 12:41:53 (Actually, GEB only cites GÖdel, so it's known that types are silly since 1932). 12:42:17 pjb: what's GEB? and what do you mean by "destroy types"? 12:42:44 "Gödel Escher and Bach, an Eternal Golden Braid". Douglas Hofstadter. 12:43:00 "destroy types" = explains why they're silly and useless. 12:43:04 pjb: ahah. sure. 12:43:14 you are saying that there is no point in well typed languages? 12:43:25 Yes. 12:43:32 *bremner* smells troll 12:43:46 bremner: say that to Gödel. 12:43:48 bremner: me too. 12:44:08 godel is dead. 12:44:10 But you're in good company, Russel wanted them. 12:45:00 *Arafangion* is having difficulty understanding the _point_ of the deep-emacs page, so far still looks to be ordinary functional composition. 12:45:15 Which I already do in C#, albiet clumsily. 12:46:08 Arafangion: yes. There's not a lot of point in monads. 12:46:34 Arafangion: he's trolling. 12:46:54 either that, or he doesn't understand what monads are 12:46:56 Arafangion: "purely functionnal" guys are all over it, but they just don't realize that normal programming languages are just using the most useful monad by default and that's it. 12:47:06 Heh - well, the technique is extremely useful - I use it all the time, but I don't *call* it a mysterious monad. 12:47:14 Exactly. 12:47:18 ahah 12:47:22 ok, i'm out 12:47:35 don't want to lose time in this 12:47:39 I don't know a single OO program that doesn't use monads. 12:48:26 pjb: again, you don't understand what monads are. http://en.wikipedia.org/wiki/Monad_(functional_programming) . gooodbye 12:48:37 Well, I use them considerably less in ObjC, although I seem to be trying to use them more now that I can use blocks. 12:48:53 -!- Bahman [~bahman@2.144.254.199] has quit [Quit: Farewell] 12:48:57 rostayob: Chat to you another day. :) 12:49:21 Bahman [~bahman@2.144.254.199] has joined #scheme 12:49:51 -!- Arafangion [~arafangio@220-244-108-23.static.tpgi.com.au] has quit [Quit: Restarting screen... It's behaving oddly.] 12:50:18 Arafangion [~arafangio@220-244-108-23.static.tpgi.com.au] has joined #scheme 12:50:53 Arafangion: we can chat now but if we start with "I don't know a single OO program that doesn't use monads."... 12:51:11 either you can't be bothered to read what monads are or you're trolling 12:51:20 you are mixing people up 12:51:25 rostayob: I'm currently reading them, but I'm finding it hard to *separate* the concepts. 12:51:47 I said it. 12:51:48 Arafangion: monads have *nothing* to do with OO. I don't know what you are reading, but it must be really misleading. 12:51:58 rostayob: pjb's deep-emacs page just seems to make me think of python lisp comprehensions, which are easily done in other languages as well, although not as elegantly as python. 12:52:07 http://dorophone.blogspot.com/2011/04/deep-emacs-part-1.html 12:52:26 rostayob: read ^ and tell us if that's not monads. 12:53:00 pjb: i'm sure that you can do monads in lisp. as you can in python. and c. or whatever. but they don't share anything with objects as in OO programming 12:54:11 also, doing monads without in a dynamic language must be funny 12:54:14 rostayob: you can implements monads in OO. As soon as you have a method to combine the results of functions or methods, you have essentially a monad. 12:54:46 pjb: saying stuff like "you essentially have a monad" is stupid. a monad is something really specific and non-vague 12:55:02 rostayob: I've yet to find a non-vague description of monads. 12:55:15 I use the List monad everyday: append-map, append, list, '(). 12:55:18 *disappears* 12:55:25 Arafangion: "In category theory, a monad, Kleisli triple, or triple is an (endo-)functor, together with two natural transformations." 12:55:29 And this is what you have as soon as you have a recursive composite design pattern. 12:55:48 DT``: that's a Monoid :P 12:56:04 rostayob: well, I mean you have monads. Perhaps you don't have syntactic abstraction to cover it, but you have it. 12:56:31 pjb: and...? what are you trying to prove? that you can implement monads in other languages that are not haskell? 12:56:36 you don't even need objects eh 12:57:16 -!- MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has quit [Ping timeout: 258 seconds] 12:57:20 but in haskell they make sense, while they don't in most languages 12:57:21 rostayob: Effectively, basic floating point operations are all "Maybe monads". 12:57:52 Arafangion: mhm? 12:58:18 right 12:58:20 rostayob: Any operation on a NaN is NaN. 12:58:28 yeah that's a good analogy. 12:58:41 But that's the point - it's just propogation. 12:58:55 Why do you have this mysterious complicated term for it? 12:58:55 That said I agree that it's a nice abstraction that can easily be used in lisp. 12:58:57 it captures that generic pattern 12:59:30 bremner: Saying that a monad is a "Mapping function" makes much more sense for the examples I've seen. 12:59:32 Arafangion: the term comes from the mathematicians who invented it... 12:59:37 and monads are another level more of abstraction beyond that, but yes, after two levels of instantiation, you get floating point 12:59:52 Arafangion: you forced me to give you the complicated term asking me for the formal definition. you need the formal definition because "it's just propagation" doesn't mean anything, while that propagation has a specific meaning in category theory 13:00:05 *that definition, not that propagation :P 13:00:51 i mean once you know what a functor is, monads are cleary functors with something added 13:00:51 pjb: A crucial bit of information in understanding it! 13:01:20 rostayob: What's a functor? (Just to clarify - my understanding of a 'functor' might not be the same as yours) 13:01:50 Arafangion: no, a functor in category theory is a functor :P 13:02:26 anyway, in haskell terms a functor is a type with an inner type (technically a type of kind * -> *) that you can map over. 13:02:36 for example, list are functors, and their mapping function is "map" 13:03:20 rostayob: Now I think I'm getting somewhere. :) 13:03:44 It's really simple, but you have to study category theory for a semester before you can understand it :-) 13:03:51 pjb: no, you don't. 13:04:05 category theory is completely unnecessary in understanding functor and monads in haskell 13:04:24 rostayob: I disagree. 13:04:30 rostayob: How else would one understand the term? 13:04:51 Arafangion: the term is just a term 13:04:57 as "interface" or "class" are terms 13:05:05 but they actually refer to concepts in category theory 13:05:24 rostayob: Those terms have vague meanings as well, depending on the language in question. 13:05:38 Arafangion: vague in terms of implementation and syntax maybe 13:05:46 but still, a functor is a really specific thing 13:06:03 Well, A functor in C++ is a different thing altogether. 13:06:16 Arafangion: i don't know C++, sorry 13:06:31 rostayob: In C++, it's an object that behaves like a function. 13:07:08 I wish they wouldn't do that 13:07:13 In Delphi, an interface has nothing to do with classes. 13:07:31 Interfaces have *completely different* semantics with respect to resource management. 13:07:35 Arafangion: I don't see where you're going. 13:07:54 The point was that you do need to understand where the concept comes from, in order to know what the concept /is/. 13:08:30 Arafangion: I think you're just going in circles, my only point is that a functor, in the category theory sense, is well defined 13:08:34 end of the story 13:08:45 rostayob: Yes, but only when you say "in the category theory sense". 13:08:54 Arafangion: fair enough. happy? 13:08:56 rostayob: I had no way of knowing, as a newcomer, that category theory is implied. 13:09:05 Arafangion: you don't need to anyway... 13:09:38 category theory is always implied :) 13:09:45 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 250 seconds] 13:20:46 -!- jeapostrophe [~jay@static-74-40-137-134.dr01.crth.il.frontiernet.net] has quit [Quit: jeapostrophe] 13:23:37 -!- Bahman [~bahman@2.144.254.199] has quit [Quit: Farewell] 13:24:02 rostayob: I've now read that page twice (getting our feet wet...), I don't think I can understand it without learning Haskell. 13:24:08 stis [~stis@1-1-1-39a.veo.vs.bostream.se] has joined #scheme 13:25:40 Arafangion: you have to understand how the type system works yeah 13:26:00 rostayob: I'm lost with the syntax, exepcially when they start using infix notation. 13:26:35 Arafangion: fair enough, then what I can advice you to do is read that book from the beginning :D 13:26:44 I think that a programmer can only gain from learning some haskell 13:27:00 Haskell has been on my list for a long time. :( 13:27:40 Arafangion: trust me it's really rewarding. it's the best way to learn about types, purity and lazyness imho 13:27:58 different things that you find almost only in haskell 13:28:02 i mean types no (there's ML) 13:28:10 but purity and lazyness, there isn't much else 13:28:10 The biggest obstacle in finding time to learn it, has been finding out how to use it in, say, a typical GUI program that has user input. 13:28:35 I can understand the lazyiness bit, the languages I use let you do it, but badly. 13:28:53 Arafangion: haskell is lazy be default (: 13:28:56 Linq could be argued as lazy evaluation. 13:29:00 (Which is in C#) 13:29:10 Arafangion: yeah GUI in haskell is a bit ackward, but why do you have to do gui? 13:29:12 Yeah, it's a very neat trait. 13:29:21 Because 99.99% of my projects use a GUI in some form. 13:29:34 (and it is not ackward because of the language, but because haskellers are not that much interested in gui I guess) 13:29:55 yeah but you can do wonderful things without a gui. I mean if you want user interaction, you can always do a web app 13:30:17 I don't see how I could, yet. 13:30:30 It would have to be a very simplistic web app. 13:30:34 Linq is probably a good place to look to understand monads as a c# programmer. Check the wikipedia page 13:30:46 Arafangion: well if you do simple stuff 13:30:50 isn't the command line enough? 13:31:07 i mean i neved did gui in my life because i think it's incredibly boring 13:31:11 No. 13:31:12 supposedly Linq's SelectMany is like Bind 13:32:18 bremner: Doesn't the structure change? 13:32:46 oh, I don't actually know Linq, I'm just pattern matching 13:32:49 rostayob: No, the command line isn't enough. 13:33:41 Arafangion: I mean while learning a language I don't see why you need GUI do to little stuff 13:33:50 there are good tools for graphics in haskell btw 13:34:34 also, I think the bindings are ok on a linux/windows platform, I think that it's quite bad in os x. but again, I don't really know, I just read haskell-cafe and people complain 13:34:45 rostayob: The stuff I do is fundamentally user driven, although I suppose one of my pet projects - yet another git bridge, could perhaps be done in a functional design. 13:34:59 rostayob: I am primarily working in .NET and ObjC> 13:35:06 (Except for the git thing, which is in python) 13:36:57 Arafangion: again, never did gui. I might be wrong and maybe the situation is nicer, I don't know, ask on #haskell :) 13:38:19 rostayob: Fundamentally, I have to model *state*. 13:39:56 down with state power! 13:41:08 I mean, if I read articles in Lisp, I think "Right, that makes sense...", but Haskell? I think "Hmm, ok, but how do you *apply* that to a real project that deals with real users?" 13:42:46 Arafangion: ? why would haskell be unfit for user interaction? 13:42:50 i mean what makes you feel that way 13:42:51 I would guess that, if one were to use a model-view-controller paradigm, the model could easily be in Haskell, but the controller would be difficult - although the view could well be in Haskell. 13:43:28 rostayob: Because handling user input must be decoupled from view output. 13:43:32 Arafangion: first of all, thinking in terms of MVC is quite useless in a functional programming language imho. 13:43:39 I just think about functions 13:43:47 Functions have to be invoked somehow. 13:43:49 and types 13:44:08 yeah but you can decouple logic and view easily 13:44:14 without being in the MVC frame 13:44:31 Well, MVC's poorly defined anyway, important thing is that there's separation. 13:44:47 But say, you have logic implemented in Haskell. 13:45:01 Arafangion: yeah, than you'll probably end up with some data type 13:45:04 and you display that 13:45:25 I mean what's the problem 13:45:38 Yes, but it's too sequentual. 13:45:49 You have an input. You evaluate it and determine an output. 13:45:54 A given input has a given output. 13:46:01 Sounds like a function to me 13:46:07 Arafangion: yes, what's bad about that? 13:46:15 you'll have a state anyway 13:46:25 probably a monads stack in which you do what you have to do 13:46:43 YES. You end up needing a significant amount of state. 13:46:52 Arafangion: that's fine 13:47:21 cigarette break ehe 13:47:28 I"m off to bed shortly. 13:48:31 Conceptually, I think I could easily use Haskell in a GUI project, I just don't know how I would use *only* haskell in GUI project. 13:50:44 reminds me of http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg01629.html 13:51:54 wingo: Yes, this is ultimately a patterns question. 13:52:09 Patterns discussion, even. 13:53:26 Haskell is not a concurrent language, isn't it? 13:54:10 wrong channel :) 13:54:36 wingo: Why didn't you say that... An hour ago? 13:54:39 :) 13:55:01 -!- gravicappa [~gravicapp@80.90.116.82] has quit [Ping timeout: 240 seconds] 13:56:01 Could I summarize monads as curried Functors? 13:56:12 Arafangion: haskell has excellent concurrency support, http://hackage.haskell.org/package/stm 13:56:15 for example 13:56:19 but yes, wrong channel 13:56:49 -!- copumpkin [~pumpkin@unaffiliated/pumpkingod] has quit [Quit: Computer has gone to sleep.] 13:56:50 also, purity makes concurrent programming a lot easier 13:57:07 rostayob: Ahh, then I could see how it might work, although that page "A fistful of monads" doesn't seem to do anything to do with shared state. 13:58:25 Keeping your routines functional most definetly makes concurrency easier, even if your "concurrency" is just events. 14:00:50 *Arafangion* thinks he's cut down his "list of languages to learn" from "about 50" to Scheme and Haskell. 14:00:59 Arafangion: good job! eheh 14:01:31 -!- ccorn [~ccorn@84-53-64-50.adsl.unet.nl] has quit [Quit: ccorn] 14:03:30 rostayob: How would you respond if I said that Monads were curried functors applied to a sequence? 14:04:33 Arafangion: curried functors? a functor is a type 14:04:47 not a function 14:05:11 *Arafangion* throws away that mental model, then. 14:09:51 frx [~frx@76.73.16.26] has joined #scheme 14:09:55 hello 14:10:56 would this macro I found in some common lisp code be possibe in scheme? (collect (c) (c 10) (c 20)) -> returns (10 20) list 14:12:38 not sure if this is the difference between hygienic and unhygienic macros? 14:13:18 -!- MichaelRaskin [~MichaelRa@195.178.216.22] has quit [Ping timeout: 252 seconds] 14:14:07 frx, it returns `c' or the last expression in the body? 14:14:17 it returns c 14:14:28 (c 10) collects into c 14:14:38 -!- kuribas [~user@94-227-90-188.access.telenet.be] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 14:15:05 this works too. (collect (c1 c2) (c1 10) (c2 20))). => ((10) (20)) 14:15:26 is this possible? 14:15:32 in scheme 14:15:34 sure it is. 14:15:59 ah okay. I thought I figured out the difference in macro hygiene, guess not 14:16:23 frx: huh? macro hygiene is about how do you write macros 14:16:59 frx, the difference is: you can't introduce new identifiers. 14:17:39 so how can you write a macro like above? c1 and c2 are new identifiers 14:17:46 (btw, here's the macro: http://paste.lisp.org/display/122688) 14:18:04 cool thanks 14:18:37 frx, the macro didn't produce them, you did. 14:18:59 you can't write an `aif' that implicitly binds `it'. 14:19:26 like in (aif (assoc ...) it (error "not found")) 14:20:21 ah i see 14:24:20 copumpkin [~pumpkin@unaffiliated/pumpkingod] has joined #scheme 14:30:23 pumpkin [~pumpkin@17.45.135.69] has joined #scheme 14:30:23 -!- pumpkin [~pumpkin@17.45.135.69] has quit [Changing host] 14:30:23 pumpkin [~pumpkin@unaffiliated/pumpkingod] has joined #scheme 14:30:54 -!- copumpkin [~pumpkin@unaffiliated/pumpkingod] has quit [Ping timeout: 252 seconds] 14:32:14 bgs100 [~ian@unaffiliated/bgs100] has joined #scheme 14:35:10 im trying to understand differences between common lisp and scheme. does scheme have OOP, and exceptions? 14:35:15 conditionals 14:36:54 OOP and exceptions aren't standardised, but all `real' Scheme systems have them. 14:37:03 not in the standard, but most implementations provide exceptions and OOP. 14:39:05 weren't exceptions standardised in r6rs ? 14:41:09 -!- samth_ [~samth@c-24-128-51-63.hsd1.ma.comcast.net] has quit [Ping timeout: 255 seconds] 14:42:07 soveran [~soveran@186.19.214.247] has joined #scheme 14:48:13 kilimanjaro [~kilimanja@unaffiliated/kilimanjaro] has joined #scheme 14:59:05 MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has joined #scheme 15:06:33 ive googled abit there seems to be CLOS OOP library made after CLOS in common lisp. how portable is it? 15:06:54 aisa [~aisa@c-68-35-164-105.hsd1.nm.comcast.net] has joined #scheme 15:07:18 -!- aisa [~aisa@c-68-35-164-105.hsd1.nm.comcast.net] has quit [Client Quit] 15:09:40 -!- hkBst [~quassel@gentoo/developer/hkbst] has quit [Remote host closed the connection] 15:12:00 frx: The various object systems in various Scheme implementations have similarities, but they are not identical. 15:12:23 frx: You'll just have to learn one implementation and stick with it. 15:12:40 frx: The ones I know about are Swindle (Racket), Coops (Chicken), and GOOPS (Guile). 15:13:15 Of course there's the one that comes from Stklos (which I think GOOPS is derived from). 15:15:33 ckrailo [~ckrailo@208.86.167.249] has joined #scheme 15:21:09 -!- pyrony [~epic@99-105-56-162.lightspeed.sntcca.sbcglobal.net] has quit [Ping timeout: 264 seconds] 15:24:25 racket has a syntactic object system too i think 15:26:24 wingo: Right, but it's not CLOS-like, unlike Swindle. 15:26:53 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 15:29:44 true, true 15:29:51 good day Riastradh 15:32:09 Hi. 15:32:45 blueadept [~blueadept@unaffiliated/blueadept] has joined #scheme 15:34:03 -!- tupi [~david@189.60.161.65] has quit [Remote host closed the connection] 15:38:28 -!- samth_away is now known as samth 15:42:13 any linear algebra utilities for guile? 15:43:35 frx: dharmatech's tinyclos port works across a few R6RS implementations 15:43:49 frx: http://github.com/dharmatech/clos 15:44:50 -!- pumpkin is now known as copumpkin 15:45:33 -!- MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has quit [Ping timeout: 258 seconds] 15:45:55 gravicappa [~gravicapp@80.90.116.82] has joined #scheme 15:46:45 HG` [~HG@p5DC05749.dip.t-dialin.net] has joined #scheme 15:51:04 pyrony [~epic@108.122.127.81] has joined #scheme 15:53:30 MichaelRaskin [~MichaelRa@195.91.224.225] has joined #scheme 15:53:30 Bahman [~bahman@2.144.254.199] has joined #scheme 15:58:07 -!- thoolihan [~Tim@50.51.92.84] has quit [Ping timeout: 246 seconds] 15:58:47 thoolihan [~Tim@50.51.23.145] has joined #scheme 16:03:38 djcb [~user@a88-114-88-233.elisa-laajakaista.fi] has joined #scheme 16:07:27 thanks 16:22:08 -!- gienah [~mwright@ppp121-44-237-46.lns20.syd7.internode.on.net] has quit [Quit: leaving] 16:28:11 -!- pyrony [~epic@108.122.127.81] has quit [Ping timeout: 240 seconds] 16:38:42 peterhil [~peterhil@hoasnet-ff04dd00-56.dhcp.inet.fi] has joined #scheme 16:39:50 monqy [~chap@pool-71-102-217-117.snloca.dsl-w.verizon.net] has joined #scheme 16:45:17 -!- soveran [~soveran@186.19.214.247] has quit [Remote host closed the connection] 16:46:04 pyrony [~epic@office1.klout.com] has joined #scheme 16:48:44 soveran [~soveran@186.19.214.247] has joined #scheme 16:51:50 MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has joined #scheme 16:52:40 -!- MichaelRaskin [~MichaelRa@195.91.224.225] has quit [Ping timeout: 240 seconds] 16:52:52 tupi [~david@189.60.161.65] has joined #scheme 16:53:07 -!- gravicappa [~gravicapp@80.90.116.82] has quit [Remote host closed the connection] 16:59:31 MichaelRaskin [~MichaelRa@195.91.224.225] has joined #scheme 17:01:50 -!- MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has quit [Ping timeout: 258 seconds] 17:14:55 -!- ^micro [~micro@www.bway.net] has quit [Quit: BitchX-1.1-final -- just do it.] 17:31:21 micro [~micro@www.bway.net] has joined #scheme 17:35:45 -!- gnomon [~gnomon@CPE0022158a8221-CM000f9f776f96.cpe.net.cable.rogers.com] has quit [Ping timeout: 276 seconds] 17:36:04 gnomon [~gnomon@CPE0022158a8221-CM000f9f776f96.cpe.net.cable.rogers.com] has joined #scheme 17:37:02 HG`` [~HG@p5DC0513F.dip.t-dialin.net] has joined #scheme 17:38:34 fantazo [~fantazo@213.129.230.10] has joined #scheme 17:40:14 -!- HG` [~HG@p5DC05749.dip.t-dialin.net] has quit [Ping timeout: 240 seconds] 17:42:41 -!- replore_ [~replore@ntkngw256114.kngw.nt.ftth.ppp.infoweb.ne.jp] has quit [Remote host closed the connection] 17:47:34 gravicappa [~gravicapp@ppp91-77-169-180.pppoe.mtu-net.ru] has joined #scheme 17:54:23 -!- gravicappa [~gravicapp@ppp91-77-169-180.pppoe.mtu-net.ru] has quit [Remote host closed the connection] 18:01:33 ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 18:02:33 -!- tupi [~david@189.60.161.65] has quit [Ping timeout: 264 seconds] 18:10:28 mippymoe89 [~mippymoe8@c-24-147-92-217.hsd1.vt.comcast.net] has joined #scheme 18:10:51 -!- DT`` [~Feeock@net-93-149-39-118.cust.dsl.teletu.it] has quit [Ping timeout: 255 seconds] 18:14:10 tupi [~david@189.60.161.65] has joined #scheme 18:17:22 -!- rpg [~rpg@216.243.156.16.real-time.com] has quit [Quit: rpg] 18:25:49 -!- Nisstyre [~nisstyre@109.74.204.224] has quit [Quit: Leaving] 18:26:05 -!- mippymoe89 [~mippymoe8@c-24-147-92-217.hsd1.vt.comcast.net] has quit [Ping timeout: 250 seconds] 18:26:31 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 250 seconds] 18:27:29 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 18:28:54 mippymoe89 [~mippymoe8@c-24-147-92-217.hsd1.vt.comcast.net] has joined #scheme 18:29:26 Nisstyre [~nisstyre@109.74.204.224] has joined #scheme 18:32:36 MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has joined #scheme 18:36:51 -!- fantazo [~fantazo@213.129.230.10] has quit [Ping timeout: 276 seconds] 18:38:05 fantazo [~fantazo@213.129.230.10] has joined #scheme 18:45:30 -!- mippymoe89 [~mippymoe8@c-24-147-92-217.hsd1.vt.comcast.net] has quit [Ping timeout: 255 seconds] 18:50:24 nego [~nego@c-76-16-30-244.hsd1.il.comcast.net] has joined #scheme 18:55:14 DT`` [~Feeock@net-93-149-69-95.cust.dsl.teletu.it] has joined #scheme 19:04:30 -!- MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has quit [Ping timeout: 258 seconds] 19:05:05 tauntaun [~Crumpet@ool-44c711b3.dyn.optonline.net] has joined #scheme 19:08:43 -!- Nisstyre [~nisstyre@109.74.204.224] has quit [Ping timeout: 258 seconds] 19:18:44 Nisstyre [~nisstyre@109.74.204.224] has joined #scheme 19:19:05 -!- Nisstyre [~nisstyre@109.74.204.224] has quit [Remote host closed the connection] 19:20:49 Nisstyre [~nisstyre@109.74.204.224] has joined #scheme 19:24:01 -!- fbs is now known as bas 19:25:46 inquest12 [~dbaweja@65.95.15.112] has joined #scheme 19:29:17 -!- soveran [~soveran@186.19.214.247] has quit [Remote host closed the connection] 19:42:57 aisa [~aisa@c-68-35-164-105.hsd1.nm.comcast.net] has joined #scheme 19:43:30 -!- frx [~frx@76.73.16.26] has quit [Quit: .] 19:48:32 pdlogan [~patrick@174-25-37-137.ptld.qwest.net] has joined #scheme 19:50:04 HG``` [~HG@p579F7BD2.dip.t-dialin.net] has joined #scheme 19:53:11 -!- HG`` [~HG@p5DC0513F.dip.t-dialin.net] has quit [Ping timeout: 250 seconds] 19:56:13 djcb` [~user@a88-114-88-233.elisa-laajakaista.fi] has joined #scheme 19:57:45 -!- djcb [~user@a88-114-88-233.elisa-laajakaista.fi] has quit [Ping timeout: 240 seconds] 19:58:59 aidalgol [~user@114-134-7-23.rurallink.co.nz] has joined #scheme 19:59:18 -!- copumpkin [~pumpkin@unaffiliated/pumpkingod] has quit [Ping timeout: 255 seconds] 20:00:49 -!- ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 20:01:04 copumpkin [~pumpkin@17.45.135.69] has joined #scheme 20:01:04 -!- copumpkin [~pumpkin@17.45.135.69] has quit [Changing host] 20:01:04 copumpkin [~pumpkin@unaffiliated/pumpkingod] has joined #scheme 20:07:51 -!- inquest12 [~dbaweja@65.95.15.112] has quit [Ping timeout: 276 seconds] 20:10:24 ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 20:14:21 dralston [~dralston@174.1.92.214] has joined #scheme 20:17:15 -!- stis [~stis@1-1-1-39a.veo.vs.bostream.se] has left #scheme 20:25:18 -!- ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has quit [Remote host closed the connection] 20:27:00 -!- dralston [~dralston@174.1.92.214] has quit [Quit: leaving] 20:31:56 drdo [~drdo@91.205.108.93.rev.vodafone.pt] has joined #scheme 20:36:12 stis [~stis@host-90-235-77-23.mobileonline.telia.com] has joined #scheme 20:37:02 -!- fantazo [~fantazo@213.129.230.10] has quit [Remote host closed the connection] 20:40:31 ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 20:45:58 -!- EbiDK [3e6b7ac3@gateway/web/freenode/ip.62.107.122.195] has quit [Ping timeout: 252 seconds] 20:53:39 -!- ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 20:55:38 I'm reading SICP, doing the exercises with chicken scheme. What should I refer to when looking for some functions (e.g. if an item is a member of a list)? R5RS? 20:57:45 R5RS should more than cover what you'd need for SICP. You could also try looking at the Chicken documentation and The Scheme Programming Language, 3rd edition. 20:58:50 fds: thanks. what would be handy it's a list of the functions that are always available in chicken scheme 20:59:22 I think this is the first place to look for Chicken documentation: http://api.call-cc.org/doc/ 20:59:41 The full list would be in the manual somewhere, but it's rather long 20:59:57 See the `supported language' link 21:01:07 fds: I think that this: http://api.call-cc.org/doc/scheme is what I was looking for 21:01:30 btw, is chicken a good choice? 21:01:43 Yep, I'd definitely say so. 21:02:08 It's not everyone's first choice, but I doubt there's anyone here who'd say it was a bad choice. 21:02:17 I could be wrong of course. :-) 21:02:43 fds: ok. the default REPL is quite bad but readline seems to fix most problems ehehe 21:03:31 Yeah, the REPL isn't really meant to be used `bare'. I'd personally use it inside Emacs. 21:04:07 rostayob: didn't the readline egg do the trick? 21:04:49 good evening, schemers 21:04:56 Hi wingo 21:05:03 heya mario-goulart 21:05:08 evening wingo 21:06:10 mario-goulart: yeah it did 21:06:17 fds: right, I didn't think of that 21:06:50 rostayob: take a look at http://wiki.call-cc.org/emacs 21:07:48 mario-goulart: yeah I'm trying it now (: 21:08:09 :-) 21:08:53 is there a shortcut to load the current file? C-c C-l asks me each time 21:09:30 greets, greets. 21:09:39 what's going on? 21:09:56 are we getting a new r7 draft to play with sometime :) 21:09:57 ? 21:10:26 *wingo* been in javascript land for a little while; wierd place. 21:10:29 SOON, my friend, SOON 21:10:44 yeah, JS is weirdshit 21:10:58 Don't tell me... 21:11:06 Also, www.wtfjs.com 21:11:38 haha, hadn't seen that ;-) 21:11:46 sjamaan: ahah wtfjs is great. also, I got burnt a lot of times with js scoping system 21:11:57 What scoping system? ;) 21:12:05 sjamaan: this http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting 21:12:11 wingo, Working Group 1 has voted to replace Scheme's syntax by something inspired by JavaScript, and Scheme records will be replaced by the proposed JavaScript class mechanism. 21:12:39 rostayob: oh yeah, JS is fun like that 21:12:47 sjamaan: lots of fun 21:12:48 Riastradh: Joy! 21:12:54 "Scheme for humans" 21:12:58 No, JavaScript, not Joy. 21:12:59 Riastradh: i think to cash in on js's success r7 should be called JavaScriptScript 21:13:08 mario-goulart: Brought to you by Canonical? 21:13:21 heh 21:13:24 That said, LAMBDA has been replaced by Joy's [...], including the stack-oriented aspects of Joy in the ellipsis. 21:14:00 *mario-goulart* heads home 21:14:03 More fun with JS: http://enterprise-js.com/ 21:14:11 cya later, mario-goulart 21:17:14 Apropos of bogosity, I don't think this has made the rounds here het: . 21:17:20 `yet' 21:17:50 (Someone must've reflected my h and y keys. I mean, my y and h keys. Foo!) 21:18:05 ijp [~user@host109-153-23-149.range109-153.btcentralplus.com] has joined #scheme 21:18:15 ouch 21:20:28 Riastradh: yeah that got a lot of points on HN 21:20:30 poor guy 21:21:16 drdo` [~drdo@91.205.108.93.rev.vodafone.pt] has joined #scheme 21:22:40 -!- drdo [~drdo@91.205.108.93.rev.vodafone.pt] has quit [Ping timeout: 252 seconds] 21:22:43 -!- drdo` is now known as drdo 21:28:39 soveran [~soveran@186.19.214.247] has joined #scheme 21:34:09 jewel_ [~jewel@196-210-187-4.dynamic.isadsl.co.za] has joined #scheme 21:39:45 -!- aidalgol [~user@114-134-7-23.rurallink.co.nz] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 21:40:28 -!- bas is now known as fbs 21:40:39 -!- fbs [~fbs@stackdump.nl] has quit [Changing host] 21:40:39 fbs [~fbs@fsf/member/fbs] has joined #scheme 21:49:04 jewel [~jewel@196-210-187-4.dynamic.isadsl.co.za] has joined #scheme 21:49:31 fschwidom [~fschwidom@46.115.4.20] has joined #scheme 21:49:54 MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has joined #scheme 21:52:59 -!- devogon [~user@a83-163-241-74.adsl.xs4all.nl] has quit [Remote host closed the connection] 21:56:00 -!- HG``` [~HG@p579F7BD2.dip.t-dialin.net] has quit [Quit: Leaving.] 22:02:30 -!- stis [~stis@host-90-235-77-23.mobileonline.telia.com] has quit [Remote host closed the connection] 22:04:55 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 250 seconds] 22:12:24 -!- soveran [~soveran@186.19.214.247] has quit [Remote host closed the connection] 22:15:47 -!- Bahman [~bahman@2.144.254.199] has quit [Ping timeout: 258 seconds] 22:16:44 -!- MichaelRaskin [~MichaelRa@195.91.224.225] has quit [Ping timeout: 276 seconds] 22:18:57 rostayob : you should also check , e.g. for common operations on lists 22:21:19 pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has joined #scheme 22:24:01 -!- bokr [~eduska@109.110.36.68] has quit [Ping timeout: 240 seconds] 22:27:49 bokr [~eduska@109.110.35.109] has joined #scheme 22:28:55 -!- pnkfelix [~Adium@c-68-82-87-23.hsd1.pa.comcast.net] has quit [Quit: Leaving.] 22:33:55 -!- jewel [~jewel@196-210-187-4.dynamic.isadsl.co.za] has quit [Quit: Leaving] 22:34:12 -!- jewel_ is now known as jewel 22:36:19 replore [~replore@ntkngw256114.kngw.nt.ftth.ppp.infoweb.ne.jp] has joined #scheme 22:36:40 -!- wingo [~wingo@90.164.198.39] has quit [Remote host closed the connection] 22:37:20 nowhere_man [~pierre@AStrasbourg-551-1-67-188.w92-141.abo.wanadoo.fr] has joined #scheme 22:39:55 -!- fschwidom [~fschwidom@46.115.4.20] has quit [Remote host closed the connection] 22:40:20 -!- kephas [~pierre@AStrasbourg-551-1-58-192.w83-194.abo.wanadoo.fr] has quit [Ping timeout: 244 seconds] 22:43:35 cafesofie [~cafesofie@ool-18b97779.dyn.optonline.net] has joined #scheme 22:44:48 -!- cafesofie [~cafesofie@ool-18b97779.dyn.optonline.net] has left #scheme 22:46:55 -!- alfa_y_omega [~alfa_y_om@90.166.231.220] has quit [Ping timeout: 240 seconds] 22:48:23 dnolen [~davidnole@184.152.69.75] has joined #scheme 22:51:07 alfa_y_omega [~alfa_y_om@90.166.231.220] has joined #scheme 22:52:15 tricus [~tricus@h69-130-142-158.cncrtn.dsl.dynamic.tds.net] has joined #scheme 22:52:35 -!- MrFahrenheit [~RageOfTho@users-146-61.vinet.ba] has quit [Ping timeout: 258 seconds] 22:53:01 -!- ckrailo [~ckrailo@208.86.167.249] has quit [Quit: Leaving...] 22:54:13 ckrailo [~ckrailo@208.86.167.249] has joined #scheme 22:57:25 -!- tricus [~tricus@h69-130-142-158.cncrtn.dsl.dynamic.tds.net] has quit [Remote host closed the connection] 23:18:57 -!- z0d [~z0d@unaffiliated/z0d] has quit [Ping timeout: 276 seconds] 23:22:31 -!- masm [~masm@2.80.159.30] has quit [Quit: Leaving.] 23:23:36 -!- tauntaun [~Crumpet@ool-44c711b3.dyn.optonline.net] has quit [Ping timeout: 255 seconds] 23:40:10 -!- pyrony [~epic@office1.klout.com] has quit [Ping timeout: 252 seconds] 23:44:17 gienah [~mwright@ppp121-44-237-46.lns20.syd7.internode.on.net] has joined #scheme 23:45:45 -!- samth is now known as samth_away 23:47:15 pyrony [~epic@office1.klout.com] has joined #scheme 23:55:19 tauntaun [~Crumpet@64.134.66.251] has joined #scheme