00:06:34 bjz [~brendanza@125.253.99.68] has joined #scheme 00:20:12 -!- rszeno [~rszeno@79.114.106.243] has quit [Quit: Leaving.] 00:20:14 -!- fridim_ [~fridim@bas2-montreal07-2925317871.dsl.bell.ca] has quit [Quit: Leaving] 00:21:41 fridim_ [~fridim@bas2-montreal07-2925317871.dsl.bell.ca] has joined #scheme 00:35:20 githogori [~githogori@c-50-156-57-127.hsd1.ca.comcast.net] has joined #scheme 00:38:58 scoofy [scoofy@catv-89-135-71-167.catv.broadband.hu] has joined #scheme 00:39:01 -!- mmc1 [~michal@j212142.upc-j.chello.nl] has quit [Ping timeout: 248 seconds] 00:39:15 arubin [~arubin@99-114-192-172.lightspeed.cicril.sbcglobal.net] has joined #scheme 00:44:10 -!- zacts [~zacts@unaffiliated/zacts] has quit [Quit: leaving] 00:44:45 -!- davexunit [~user@c-71-232-35-199.hsd1.ma.comcast.net] has quit [Ping timeout: 240 seconds] 00:46:44 davexunit [~user@c-71-232-35-199.hsd1.ma.comcast.net] has joined #scheme 00:49:07 zacts [~zacts@unaffiliated/zacts] has joined #scheme 00:51:16 Can anyone imagine what (lambda (x) (cons (cdr x) (car x))) might be useful for? 00:54:08 jcowan, microbenchmarking? 00:54:39 Whether or not microbenchmarks are useful in and of themselves, mind you, is an entirely different conversation. 00:55:17 It's part of the Haskell library under the name of "swap" 00:58:55 that is, assuming we assimilate Haskell 2-tuples to Scheme pairs-not-used-in-lists 01:00:45 Oh, whoops, I misread that as (lambda (x) (cons (car x) (cdr x))) 01:01:02 Ah. 01:01:08 In that case, that's potentially useful if... I don't know, one is implementing a Forth in Scheme..? 01:01:10 I imagine it's useful for point-free style. 01:01:21 Ah, good point (:-)) 01:01:29 Rimshot! 01:03:43 Another question: do sorted or navigable sets add enough value to be provided as well as plain sets? 01:04:19 (Sorted sets have ordering as well as membership; navigable sets are sorted sets such that you can ask "What is the largest/smallest member that is smaller/larger than a candidate element?" 01:06:22 ) 01:11:43 -!- davexunit [~user@c-71-232-35-199.hsd1.ma.comcast.net] has quit [Read error: Connection reset by peer] 01:21:07 -!- joneshf-laptop [~joneshf@086.112-30-64.ftth.swbr.surewest.net] has quit [Ping timeout: 256 seconds] 01:29:52 -!- MrFahrenheit [~RageOfTho@77.221.25.95] has quit [Ping timeout: 260 seconds] 01:40:21 sstrickl [~sstrickl@racket/sstrickl] has joined #scheme 01:40:22 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 01:49:57 -!- sstrickl [~sstrickl@racket/sstrickl] has quit [Quit: sstrickl] 01:55:59 joneshf-laptop [~joneshf@086.112-30-64.ftth.swbr.surewest.net] has joined #scheme 02:06:26 determinant [~ymf@2606:df00:3::2939:12fc] has joined #scheme 02:07:58 hello, does anybody know what implementation vector uses? 02:08:46 In which Scheme? 02:09:00 Vectors are normally implemented as consecutive blocks of machine addresses, as in C. 02:18:14 -!- tolk [~user@host23.190-225-91.telecom.net.ar] has quit [Ping timeout: 240 seconds] 02:19:08 jcowan: that information is enough for me, thanks. I'm writing a simple Scheme interpreter ;) 02:21:02 Remember to keep the length around, unless you are writing an unsafe implementation. 02:33:23 ehaliewi` [~user@50-0-51-11.dsl.static.sonic.net] has joined #scheme 02:33:35 -!- ehaliewi` [~user@50-0-51-11.dsl.static.sonic.net] has quit [Remote host closed the connection] 02:41:40 -!- fridim_ [~fridim@bas2-montreal07-2925317871.dsl.bell.ca] has quit [Ping timeout: 245 seconds] 02:42:31 -!- adiii [~adityavit@c-50-156-85-49.hsd1.ca.comcast.net] has quit [Ping timeout: 264 seconds] 02:43:55 asumu_ [~at@2001:470:b:b7:1e6f:65ff:fe23:c3d4] has joined #scheme 02:47:47 -!- asumu [~at@2001:470:b:b7:1e6f:65ff:fe23:c3d4] has quit [Ping timeout: 240 seconds] 02:47:48 -!- levi [~user@c-24-10-225-212.hsd1.ut.comcast.net] has quit [Ping timeout: 240 seconds] 02:48:20 -!- weie [~eie@softbank221078042071.bbtec.net] has quit [Read error: Connection reset by peer] 02:48:54 weie [~eie@softbank221078042071.bbtec.net] has joined #scheme 02:52:00 jcowan: understand. thx. 02:52:27 What language are you writing the interpreter in? 02:57:38 -!- ehaliewicz [~user@50-0-51-11.dsl.static.sonic.net] has quit [Ping timeout: 245 seconds] 03:01:17 ehaliewicz [~user@50-0-51-11.dsl.static.sonic.net] has joined #scheme 03:21:15 preflex_ [~preflex@unaffiliated/mauke/bot/preflex] has joined #scheme 03:22:30 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Ping timeout: 245 seconds] 03:22:37 -!- preflex_ is now known as preflex 03:28:05 -!- joneshf-laptop [~joneshf@086.112-30-64.ftth.swbr.surewest.net] has quit [Ping timeout: 248 seconds] 03:30:33 jcowan: c++ 03:30:49 jcowan: so I planned to use STL vector 03:31:02 *jcowan* nods. 03:32:21 *determinant* stare at the screen with vacant eyes 03:38:00 *offby1* stares blankly 03:52:40 -!- sttau [~sttau@unaffiliated/sttau] has quit [Ping timeout: 260 seconds] 03:55:19 -!- bjz [~brendanza@125.253.99.68] has quit [Read error: Connection reset by peer] 03:57:59 sttau [~sttau@unaffiliated/sttau] has joined #scheme 04:01:33 bjz [~brendanza@125.253.99.68] has joined #scheme 04:01:41 -!- vishesh [~vishesh@103.26.217.191] has quit [Ping timeout: 248 seconds] 04:03:51 -!- dsmith [~dsmith@cpe-184-56-129-232.neo.res.rr.com] has quit [Ping timeout: 260 seconds] 04:05:53 -!- Kruppe [~user@CPE602ad0938e9a-CM602ad0938e97.cpe.net.cable.rogers.com] has quit [Remote host closed the connection] 04:11:58 -!- jcowan [~John@mail.digitalkingdom.org] has quit [Quit: Leaving] 04:18:35 dsmith [~dsmith@cpe-184-56-129-232.neo.res.rr.com] has joined #scheme 04:25:42 zacts_ [~zacts@unaffiliated/zacts] has joined #scheme 04:25:51 -!- zacts [~zacts@unaffiliated/zacts] has quit [Ping timeout: 256 seconds] 04:29:26 MichaelRaskin [~MichaelRa@195.178.216.22] has joined #scheme 04:31:52 -!- zacts_ is now known as zacts 04:33:56 -!- tabemann [~travisb@adsl-68-254-166-0.dsl.milwwi.ameritech.net] has quit [Ping timeout: 246 seconds] 04:44:34 -!- determinant [~ymf@2606:df00:3::2939:12fc] has left #scheme 04:45:51 tabemann [~travisb@adsl-69-210-130-215.dsl.milwwi.ameritech.net] has joined #scheme 04:46:26 -!- githogori [~githogori@c-50-156-57-127.hsd1.ca.comcast.net] has quit [Read error: Connection reset by peer] 04:50:01 -!- arubin [~arubin@99-114-192-172.lightspeed.cicril.sbcglobal.net] has quit [Quit: Textual IRC Client: www.textualapp.com] 04:53:24 levi` [~user@c-24-10-225-212.hsd1.ut.comcast.net] has joined #scheme 04:58:21 -!- zacts [~zacts@unaffiliated/zacts] has quit [Quit: leaving] 05:01:43 gravicappa [~gravicapp@ppp91-77-180-34.pppoe.mtu-net.ru] has joined #scheme 05:02:50 githogori [~githogori@c-50-156-57-127.hsd1.ca.comcast.net] has joined #scheme 05:08:26 vishesh [~vishesh@122.177.34.216] has joined #scheme 05:14:45 -!- kobain [~kobian@unaffiliated/kobain] has quit [Quit: El motor por excelencia http://www.europio.org/] 05:16:37 -!- levi` is now known as levi 05:22:09 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 240 seconds] 05:29:55 kvda [~kvda@unaffiliated/kvda] has joined #scheme 05:31:48 zacts [~user@unaffiliated/zacts] has joined #scheme 05:33:57 -!- dsmith [~dsmith@cpe-184-56-129-232.neo.res.rr.com] has quit [Read error: Connection reset by peer] 05:38:51 userzxcvasdf [~neutral_a@c656847C1.dhcp.as2116.net] has joined #scheme 05:40:46 youlysses [~user@24-217-211-79.dhcp.stls.mo.charter.com] has joined #scheme 05:49:41 superjudge [~mjl@37-46-176-69.customers.ownit.se] has joined #scheme 05:51:05 rurufufuss [~rurufufus@115-64-27-246.static.tpgi.com.au] has joined #scheme 05:51:12 *gnomon* blanks starely 05:53:09 -!- youlysses [~user@24-217-211-79.dhcp.stls.mo.charter.com] has quit [Ping timeout: 248 seconds] 05:54:09 -!- Kabaka [~Kabaka@botters/kabaka] has quit [Ping timeout: 240 seconds] 05:59:41 Kabaka [~Kabaka@botters/kabaka] has joined #scheme 06:02:18 MrFahrenheit [~RageOfTho@77.221.25.95] has joined #scheme 06:04:44 -!- karswell` [~user@31.1.125.91.dyn.plus.net] has quit [Ping timeout: 260 seconds] 06:14:03 -!- wbooze [~wbooze@xdsl-84-44-155-251.netcologne.de] has quit [Ping timeout: 260 seconds] 06:22:48 -!- jarod_ch_ [~jarod_che@115.193.190.118] has quit [Quit: Textual IRC Client: http://www.textualapp.com/] 06:36:06 -!- userzxcvasdf [~neutral_a@c656847C1.dhcp.as2116.net] has quit [Remote host closed the connection] 06:43:53 -!- rurufufuss [~rurufufus@115-64-27-246.static.tpgi.com.au] has quit [Ping timeout: 245 seconds] 06:44:57 mmc1 [~michal@j212142.upc-j.chello.nl] has joined #scheme 06:51:41 -!- mmc1 [~michal@j212142.upc-j.chello.nl] has quit [Ping timeout: 268 seconds] 06:58:58 jewel [~jewel@196-215-5-39.dynamic.isadsl.co.za] has joined #scheme 07:02:27 youlysses [~user@24-217-211-79.dhcp.stls.mo.charter.com] has joined #scheme 07:04:23 hkBst [~marijn@gentoo/developer/hkbst] has joined #scheme 07:06:37 rszeno [~rszeno@79.114.83.84] has joined #scheme 07:19:36 alexei_ [~amgarchin@theo1.theochem.tu-muenchen.de] has joined #scheme 07:28:50 -!- kvda [~kvda@unaffiliated/kvda] has quit [Quit: z____z] 07:31:15 -!- jewel [~jewel@196-215-5-39.dynamic.isadsl.co.za] has quit [Ping timeout: 245 seconds] 07:31:56 -!- racycle [~racycle@75-25-129-128.lightspeed.sjcpca.sbcglobal.net] has quit [Remote host closed the connection] 08:04:25 jewel [~jewel@41-133-109-236.dsl.mweb.co.za] has joined #scheme 08:04:39 -!- youlysses [~user@24-217-211-79.dhcp.stls.mo.charter.com] has quit [Remote host closed the connection] 08:11:58 -!- vishesh [~vishesh@122.177.34.216] has quit [Ping timeout: 246 seconds] 08:17:52 peterhil [~peterhil@158.127.31.162] has joined #scheme 08:20:54 -!- zacts [~user@unaffiliated/zacts] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 08:30:09 Black0range [~Black0ran@46.11.53.33] has joined #scheme 08:31:21 Hello there gentlemen wondering if someone has made or know of any decent open source "scripting" languages made with scheme? 08:32:12 Chaos`Eternal [~chaos@202.111.192.34] has joined #scheme 08:34:49 you have scripting languages made of scheme 08:35:52 -!- peterhil [~peterhil@158.127.31.162] has quit [Quit: Must not waste too much time here...] 08:38:10 what do you mean by decent? 08:38:39 peterhil [~peterhil@158.127.31.162] has joined #scheme 08:45:18 -!- rszeno [~rszeno@79.114.83.84] has quit [Remote host closed the connection] 08:52:02 i need some type of text -> simple programming language 08:52:19 that more or less only can do basic operations 08:52:56 but still connect to a few scheme processes chosen by me :) 08:57:45 a scheme for text processing? 08:57:48 connect how? 09:05:36 have you look at gauche and scsh? 09:05:55 if you're going to embed you might look at another implementation 09:08:18 not quite scheme but i would need a really simple "programming language" (note the quotes) that could be parsed through is such a way that it can draw simple conclusions without having availability to do reach prodcedures or variables that i do not want it to be able to modify 09:09:40 so you want to embed a scripting language 09:14:54 vishesh [~vishesh@103.26.217.94] has joined #scheme 09:15:01 well, sit back and wait for someone knowledgeable. 09:15:17 -!- ehaliewicz [~user@50-0-51-11.dsl.static.sonic.net] has quit [Ping timeout: 248 seconds] 09:34:16 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Ping timeout: 256 seconds] 09:41:52 sttau: might make one myself :) thank you anyhow sorry for slow answers! 09:44:38 zacts [~user@unaffiliated/zacts] has joined #scheme 10:02:00 -!- tenq is now known as tenq|away 10:05:23 CADD [~CADD@12.227.104.109] has joined #scheme 10:09:05 araujo [~araujo@gentoo/developer/araujo] has joined #scheme 10:31:13 -!- jewel [~jewel@41-133-109-236.dsl.mweb.co.za] has quit [Ping timeout: 268 seconds] 10:31:59 -!- Black0range [~Black0ran@46.11.53.33] has quit [Remote host closed the connection] 10:43:10 jewel [~jewel@41-133-109-236.dsl.mweb.co.za] has joined #scheme 10:43:20 fridim__ [~fridim@bas2-montreal07-2925317871.dsl.bell.ca] has joined #scheme 10:44:58 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 10:48:43 -!- peterhil [~peterhil@158.127.31.162] has quit [Ping timeout: 240 seconds] 10:50:13 -!- CADD [~CADD@12.227.104.109] has quit [Quit: Lost terminal] 10:54:05 Cromulent [~Cromulent@cpc1-reig5-2-0-cust251.6-3.cable.virginmedia.com] has joined #scheme 10:55:14 -!- Cromulent [~Cromulent@cpc1-reig5-2-0-cust251.6-3.cable.virginmedia.com] has quit [Client Quit] 10:56:47 CADD [~CADD@12.227.104.109] has joined #scheme 11:01:24 -!- CADD [~CADD@12.227.104.109] has quit [Client Quit] 11:01:41 CADD [~CADD@12.227.104.109] has joined #scheme 11:12:39 -!- pygospa [~Pygosceli@kiel-d9bfc9b7.pool.mediaWays.net] has quit [Disconnected by services] 11:12:46 TheRealPygo [~Pygosceli@kiel-d9bfc033.pool.mediaWays.net] has joined #scheme 11:19:56 -!- fridim__ [~fridim@bas2-montreal07-2925317871.dsl.bell.ca] has quit [Ping timeout: 268 seconds] 11:28:24 peterhil [~peterhil@158.127.31.162] has joined #scheme 11:38:42 -!- acarrico [~acarrico@209.99.209.15] has quit [Read error: Operation timed out] 11:39:23 Cromulent [~Cromulent@cpc1-reig5-2-0-cust251.6-3.cable.virginmedia.com] has joined #scheme 11:41:52 ASau` [~user@p4FF96FA0.dip0.t-ipconnect.de] has joined #scheme 11:45:25 -!- ASau [~user@p4FF97D53.dip0.t-ipconnect.de] has quit [Read error: Operation timed out] 11:45:53 zeroish [~zeroish@135.207.174.50] has joined #scheme 11:48:50 karswell [~user@87.112.183.62] has joined #scheme 11:53:33 b4283 [~b4283@118.150.139.66] has joined #scheme 11:53:50 acarrico [~acarrico@209.99.209.15] has joined #scheme 11:54:07 defanor [~d@ppp91-77-112-244.pppoe.mtu-net.ru] has joined #scheme 11:57:51 edw [~edw@207.239.61.34] has joined #scheme 11:57:52 -!- defanor_ [~d@ppp91-77-117-161.pppoe.mtu-net.ru] has quit [Ping timeout: 276 seconds] 11:59:49 -!- b4283 [~b4283@118.150.139.66] has quit [Remote host closed the connection] 12:00:49 b4283 [~b4283@118.150.139.66] has joined #scheme 12:32:45 -!- jrslepak [~jrslepak@punchout.ccs.neu.edu] has quit [Quit: leaving] 12:33:01 jrslepak_neu [~jrslepak@punchout.ccs.neu.edu] has joined #scheme 12:33:04 -!- jrslepak_neu is now known as jrslepak 12:36:16 -!- tabemann [~travisb@adsl-69-210-130-215.dsl.milwwi.ameritech.net] has quit [Quit: Leaving] 12:38:55 turbopape [~turbopape@41.230.34.248] has joined #scheme 12:39:05 join #haskell 12:39:33 no 12:39:39 you forgot a slash 12:40:56 hey, its not that bad in #haskell :P 12:41:46 yeah, please don't mind it guys :) 12:42:19 hmm? 12:48:43 Kruppe [~user@CPE602ad0938e9a-CM602ad0938e97.cpe.net.cable.rogers.com] has joined #scheme 12:55:25 -!- marienz [~marienz@freenode/staff/marienz] has quit [Ping timeout: 600 seconds] 12:57:05 davexunit [~user@38.104.7.18] has joined #scheme 13:01:38 rszeno [~rszeno@79.114.79.171] has joined #scheme 13:04:34 -!- cdidd [~cdidd@128-68-15-213.broadband.corbina.ru] has quit [Ping timeout: 246 seconds] 13:05:20 cdidd [~cdidd@128-68-18-175.broadband.corbina.ru] has joined #scheme 13:06:14 -!- Cromulent [~Cromulent@cpc1-reig5-2-0-cust251.6-3.cable.virginmedia.com] has quit [Quit: KVIrc 4.2.0 Equilibrium http://www.kvirc.net/] 13:10:34 -!- rszeno [~rszeno@79.114.79.171] has quit [Quit: Leaving.] 13:13:42 -!- cdidd [~cdidd@128-68-18-175.broadband.corbina.ru] has quit [Remote host closed the connection] 13:15:38 cdidd [~cdidd@89-178-175-20.broadband.corbina.ru] has joined #scheme 13:16:42 pumpkin360 [~main@abjx135.neoplus.adsl.tpnet.pl] has joined #scheme 13:16:45 Hi. 13:17:19 langmartin [~user@host-68-169-154-130.WISOLT2.epbfi.com] has joined #scheme 13:17:43 rszeno [~rszeno@79.114.79.171] has joined #scheme 13:17:46 hello 13:17:56 -!- cdidd [~cdidd@89-178-175-20.broadband.corbina.ru] has quit [Remote host closed the connection] 13:18:14 I have an list of lists (NxN board) and I want to find out the first occurence of some element in it, is there a nice Scheme idiomatic way for doing it ? 13:19:38 as in get the position of the piece? 13:19:52 my guess would be an accumulator 13:20:05 but that is not all that nice of a solution 13:20:46 the other solution could be to make your board a bit of a better data structure. so that it holds it own position 13:20:46 accumulators are beautiful, but the problem is the second demension, 13:21:04 so when you find the piece you just take a look at the position argument in that spot 13:21:13 wel l you can have 2 accumulators 13:21:24 but that gets messy 13:21:28 (define (something arguments . optional) .... 13:22:11 imo is less messy then using a structure 13:22:35 CADD: it actually is a nicer structure which holds the possition of the element but I need to find the element it the first place. 13:22:41 cdidd [~cdidd@128-69-8-46.broadband.corbina.ru] has joined #scheme 13:22:52 if is well defined can take the avantage of tco 13:23:20 well you can map over it, thats how i would do it 13:24:02 tbh, i think we would need some more details for a better answer 13:24:03 CADD: not sure what You mean. (map ..) returns a list 13:24:11 pumpkin360, what do you mean by 'first place' in two dimensional array? 13:24:14 what is tco ? 13:24:16 oh sorry filter 13:24:20 tail call optimization 13:24:37 -!- tenq|away is now known as tenq 13:24:48 filter also returns a list, but with only the things matching the predicate 13:24:48 -!- b4283 [~b4283@118.150.139.66] has quit [Remote host closed the connection] 13:24:58 then you can just take the head of the list that filter returns 13:25:22 rszeno: well the elements are unique anyway but I have an list of lists of natural numbers and need to know where is the 0. 13:25:50 (car (filter (== 0) board)) 13:26:01 CADD: but the filter returns the element and I need it's possition. 13:26:07 fold ? 13:26:21 fold could work too 13:26:45 but you have a two dim array, traversing by column or raws first will give different results as first element in some particular cases 13:27:01 yup 13:27:11 yuo. 13:27:13 *yup. 13:27:18 thats why a list of list is a bad representation for a board 13:27:25 too little structural info 13:27:26 -!- zeroish [~zeroish@135.207.174.50] has quit [Ping timeout: 240 seconds] 13:27:36 a vector ? 13:27:40 im a big fan of ADTs, since im a haskeller 13:27:41 not realy, is about conventions only 13:27:57 true. 13:28:05 how a vector will be different? 13:28:06 rudybot: (define (find-coord target grid) (for/first ([row grid] [i (in-naturals)] #:when #t [cell row] [j (in-naturals)] #:when (equal? cell target)) (cons i j))) 13:28:07 stamourv``: your sandbox is ready 13:28:07 stamourv``: Done. 13:28:17 rudybot: (find-coord 3 '((1 2 3) (4 5 6) (7 8 9))) 13:28:18 stamourv``: ; Value: '(0 . 2) 13:28:21 pumpkin360: ^ 13:28:47 have random access then and can just iterate over indexes what seems easier. 13:29:02 stamourv``: beautiful 13:29:13 +1, :) 13:29:28 The `for' macros are great. 13:29:35 indeed 13:30:29 b4283 [~b4283@118.150.139.66] has joined #scheme 13:31:59 stamourv``: Thanks. 13:32:05 is this r5rs ? 13:32:44 no 13:33:02 what is it then? 13:33:11 that, I want to know 13:33:48 It's Racket. 13:33:55 Although, I think Guild has it too. 13:34:22 IMO, sticking to R5RS is masochism. 13:34:31 stamourv``: ok, thanks very much. 13:34:46 stamourv``: well, I'm experiencing it at the moment. 13:35:05 Give Racket a try, you'll like it. ;) 13:35:27 -!- cdidd [~cdidd@128-69-8-46.broadband.corbina.ru] has quit [Quit: Leaving] 13:35:43 cdidd [~cdidd@128-69-8-46.broadband.corbina.ru] has joined #scheme 13:35:54 Anyway, gotta go to work, will be back on IRC in ~10 minutes. 13:35:54 most likely I will just rewrite the macros and stick with R5RS but will keep Your advice in mind. 13:36:14 bay, thanks on more time. 13:37:04 *one 13:39:35 pnpuff [~Cijkl@unaffiliated/pnpuff] has joined #scheme 13:39:53 -!- pnpuff [~Cijkl@unaffiliated/pnpuff] has left #scheme 13:42:05 -!- kryptiskt [kryptiskt@213.101.209.229] has quit [Read error: Connection reset by peer] 13:42:09 kryptiskt_ [kryptiskt@213.101.209.229] has joined #scheme 13:46:22 userzxcvasdf [~neutral_a@c656847C1.dhcp.as2116.net] has joined #scheme 13:46:44 pumpkin360: Back. 13:47:19 Good luck rewriting that in R5RS. It doesn't even provide procedural macros. 13:47:40 (Neither does R7 for that matter, which is pretty embarrassing, IMO.) 13:48:34 http://mumble.net/~campbell/scheme/foof-loop.scm 13:48:59 http://mumble.net/~campbell/tmp/nested-foof-loop.scm 13:49:05 No need for procedural macros. 13:49:19 -!- hkBst [~marijn@gentoo/developer/hkbst] has quit [Quit: Konversation terminated!] 13:49:31 -!- cdidd [~cdidd@128-69-8-46.broadband.corbina.ru] has quit [Quit: Leaving] 13:49:39 Riastradh: Can that do all that Racket's comprehensions can do? 13:51:02 Re procedural macros: Sure, you can do without, Turing equivalence and all that, but do you really want to? 13:51:30 (collect-first ((for row (in-list grid)) (for i (up-from 0))) ((for cell (in-list row)) (j (up-from 0))) (if (equal? cell target)) (cons i j)) 13:51:57 Hygienic procedural macros are the number one feature that Scheme has that nobody else (except Racket, of course) has. I'm amazed that Schemers don't like them more. 13:52:11 `All', I dunno. Can certainly do a lot. 13:52:21 Yep, looks similar so far. 13:53:19 stamourv: If You say so I will save myself time trying. Lisps don't seem to be the language of AI anymore, perhaps I will start using some more serious language. 13:53:21 :( 13:53:39 Define AI. 13:53:54 For machine learning, IIUC, python seems to be king. 13:54:27 For classical AI, dunno. My understanding is that it's mostly dead. 13:54:39 cdidd [~cdidd@128-68-27-212.broadband.corbina.ru] has joined #scheme 13:54:39 I don't like SYNTAX-CASE because it doesn't have a clear macro-independent semantics; that is, the `procedural language' of macros is not a vanilla, macroless Scheme API that you can write programs in outside of the whole macro construct. 13:54:49 just looked on the results of the last google AI challenge and suprisingly somebody implemented Racket starter package. 13:54:53 For formal methods, CL is very much still in use, at least as ACL2. 13:55:36 but there where ~10 people making bots in Racket. 13:55:42 Riastradh: That's a pretty common misconception about syntax object systems. People (not saying you do) tend to see `syntax-case' itself, and stop there. 13:55:55 Misconception? 13:55:56 `syntax-case' is just a convenience, built on top of more primitive operations. 13:56:10 jeapostrophe had a blog post about that recently, lemme dig up the link. 13:56:24 pumpkin360: Yep, Racket is pretty popular these days. 13:56:37 python is the king of machine learning? Even stranger. 13:57:04 pumpkin360: Thanks to numpy and nltk, mostly, IIUC. 13:57:07 Riastradh: http://jeapostrophe.github.io/2013-07-22-123list-post.html 13:57:37 stamourv, no, that still uses #'. 13:57:51 Yes, but that's just a constructor. 13:57:58 You can use `syntax' if you prefer. 13:58:11 Syntax objects are just a datatype like any other. 13:58:13 That's still magic that extends the language. 13:58:37 If you're talking about the templating system, sure, but again, that's not primitive either. 13:58:39 Whether you write it as #' or as SYNTAX is immaterial. 13:58:54 It's built on top of `datum->syntax', which is the real constructor here. 13:58:59 `There's basically no lower tha[t] we can go with this macro.' 13:59:14 Anything else, be it #', syntax-case, syntax-parse, is just convenience on top. 13:59:36 So is it true that we go no lower than (datum->syntax #'123-list 'list), in the SYNTAX-CASE API? 13:59:41 He probably could have used `quote-syntax' there, if you really want to go lower. 13:59:43 ok, got to go. Thanks. 14:00:03 wingo [~wingo@194.183.97.113] has joined #scheme 14:00:16 (By `SYNTAX-CASE', by the way, I don't mean the particular form SYNTAX-CASE, but the whole macro system surrounding it -- of course, there have been many renditions of it, but I haven't seen any one that has a clear vanilla, macroless API.) 14:00:26 What's QUOTE-SYNTAX, then? Is that a special operator or a procedure? 14:00:43 I think it's a special operator, but I'm not 100% sure. 14:00:47 The rule here is that the language for writing macros cannot have any special operators that do not appear in the language for writing normal programs. 14:01:07 That is, the basic language for writing normal programs should be the same as the language for writing macros. 14:01:21 You can certainly use `quote-syntax' and all the others for writing regular programs. 14:01:38 You *can*, but it serves no useful purpose. 14:01:53 I've written compilers that manipulate syntax objects, no macros in sight, justbecause they're a convenient data structure for representing data with binding structure. 14:02:46 Reduce it to lambda and application (and throw in conditionals, CONS, CAR, CDR, &c., and any other built-in procedures you want) and I'll be happy. 14:03:01 ijp [~user@host109-153-30-69.range109-153.btcentralplus.com] has joined #scheme 14:03:01 As for having the two being the same language, they *are* for 99.9%. The macro language has an extra couple of things to communicate with the expander (IIUC, I'm not an expert), which is not too surprising. 14:03:09 No, that *is* surprising! 14:03:14 It's surprising and unnecessary. 14:03:24 Why? 14:03:48 You're basically doing reflection by asking for the binding of something, it makes sense to build that in. 14:04:21 Anyway, I'm not sure I understand why having *exactly* the same language matters so much. 14:04:43 It's surprising because it means that the macroless Scheme language isn't enough to write macro transformers -- you've baked extra crap, which has no significance otherwise, into the language to do that. 14:04:51 It's unnecessary because...you don't need to do that. 14:06:04 So what do you suggest instead? 14:06:06 You can take the normal macroless Scheme language, and then use that to write plugins called macros for a program called a compiler. And then you can package it up nicely into the module system, &c. 14:06:18 In MIT Scheme and Scheme48 you don't need special language extensions. 14:06:38 -!- pumpkin360 [~main@abjx135.neoplus.adsl.tpnet.pl] has quit [Ping timeout: 240 seconds] 14:06:51 (MIT Scheme and Scheme48's macro expanders lack certain features of Racket's, but it's not because of the special language extensions that they lack these.) 14:06:58 Riastradh: question, do you consider the module system something that should be written in the language, or is it "above" the language 14:07:44 ijp, you mean should some kind of DEFINE-MODULE form or whatever be a macro expanding into vanilla Scheme, or should it be a configuration file for a compiler? 14:07:50 Or do you mean something else? 14:08:14 should it expand into vanilla scheme 14:08:29 Riastradh: At this point, we're hitting the limits of my knowledge. I'm not 100% certain what the basic building blocks of a syntax object system should be, and whether any of those need to be special operators. 14:09:05 Now I understand why you want uniformity between the two, though, thanks for the explanation. 14:09:34 Personally, I'm ok with admitting that macros are special, and baking in a couple constructs if necessary. 14:10:24 racycle [~racycle@75-25-129-128.lightspeed.sjcpca.sbcglobal.net] has joined #scheme 14:10:53 -!- cdidd [~cdidd@128-68-27-212.broadband.corbina.ru] has quit [Ping timeout: 240 seconds] 14:11:52 If it just means to extend the Scheme language with Scheme it's ok, is that what your saying Riastradh? 14:12:20 *add^_* is kinda confused 14:12:51 In MIT Scheme, the macro in jeapostrophe's blog post looks something like: (define-syntax 123-list (er-macro-transformer (lambda (form rename compare) `(,(rename 'let) ((,(rename 'inner-x) 3)) (,(rename 'list) ,(rename 'x) ,(cadr form) ,(rename 'inner-x] 14:14:16 There aren't even any new built-in procedures here: the compiler plugin API is just that you write a procedure of three arguments -- the form, a procedure to get a name referring to the meaning of a name in the macro's definition environment, and a procedure to compare names by meaning. 14:14:19 Looks like the macros you use in CL :-P 14:14:23 write* 14:15:05 (But adding new built-in procedures would be OK too, provided that they don't expose any new control constructs that are not expressible with vanilla Scheme, which isn't likely for a macro API anyway.) 14:15:23 Aha 14:15:54 add^_, no, because CL macros don't have hygienic renaming. All they have is GENSYM, which is completely different; it only happens to serve the same function for local variables like INNER-X there. 14:16:31 that's not what I meant Riastradh, I meant that the use of ` and , is pretty common in CL 14:16:38 macros 14:17:00 quasiquotation is a GOOD IDEA 14:17:20 Are you being sarcastic or not ijp? 14:17:32 good question 14:17:32 ijp, the lexical environment of a program, including the macros available to it, should not be determined by taking whatever macros happen to be loaded into the interpreter already or something and expanding a MODULE macro in the source code. That's CL-style insanity, although not quite as bad. 14:17:46 add^_, well, sure, that's what quasiquotation was designed for... 14:18:36 True, but I haven't really seen it as much in Scheme as in CL 14:18:46 ijp, that said, Racket's units and signatures are a perfectly sensible way to organize ideas in programs -- at a different level from the mechanism to describe the lexical environment of the program, i.e. Racket's #LANG token or MODULE form. 14:19:30 Also, an API for manipulating and dynamically loading modules should obviously be written into the language, not `above' it, so that programs can load plugins. 14:19:59 Well, `written into' might be too strong a word; it should be available as a library. 14:20:50 -!- jewel [~jewel@41-133-109-236.dsl.mweb.co.za] has quit [Ping timeout: 245 seconds] 14:21:37 stamourv, well, syntax objects need not be special -- they're just a data structure, as you said. The problem is the QUOTE-SYNTAX special operator. 14:21:54 Let's suppose I take jeapostrophe's example, 14:22:13 (define-syntax 123-list (lambda (stx) ... (quote-syntax LET) ...)), 14:22:23 and rewrite it in two separate modules as follows: 14:22:27 Riastradh: I'm not sure I see why it's more problematic than `define-syntax'. 14:22:58 (module a racket-base (define (foo stx) ... (quote-syntax LET) ...)) 14:23:17 (module b racket-base (require a) (define-syntax 123-list foo)) 14:23:27 (Provide FOO in A too, sorry.) 14:23:33 I guess you could replace `quote-syntax' with a primitive function that takes a symbol and gives you back a syntax object, but that wouldn't make a big difference, IMO. 14:23:48 Does that still work? If so, rewrite it like this: 14:24:06 (module a racket-base (provide foo) (define syntax:let (quote-syntax LET)) (define (foo stx) ... syntax:let ...)) 14:24:11 ...and module B is the same. 14:25:06 (I don't have Racket handy to test this, so I can't tell you whether it still works, but I suspect the answer is `no'.) 14:25:11 1 second, lemme try it. 14:25:38 cdidd [~cdidd@128-68-34-247.broadband.corbina.ru] has joined #scheme 14:25:40 rudybot: (module a racket/base (define (foo stx) (quote-syntax let)) (provide a)) 14:25:40 stamourv: error: #:1:69: module: provided identifier not defined or imported for phase 0 at: a in: (#%module-begin (printing-module-begin (define (foo stx) (quote-syntax let))) (printing-module-begin (provide a))) 14:25:46 rudybot: (module a racket/base (define (foo stx) (quote-syntax let)) (provide foo)) 14:25:46 stamourv: Done. 14:25:49 ...er, sorry. 14:25:58 It's (quote-syntax 123-LIST). 14:26:06 Not (quote-syntax LET). 14:26:25 rudybot: (module a racket/base (define (foo stx) (quote-syntax 123-list)) (provide a)) 14:26:25 stamourv: error: #:1:74: module: provided identifier not defined or imported for phase 0 at: a in: (#%module-begin (printing-module-begin (define (foo stx) (quote-syntax 123-list))) (printing-module-begin (provide a))) 14:26:57 Right, you're asking for the binding of something that's unbound. 14:27:01 So, there's some magic going on here -- (quote-syntax 123-LIST) does not just expand to a form that constructs an object involving the name 123-LIST. 14:27:09 I'm not asking for a binding of anything! 14:27:23 There's no reason why in the ellipsis in (define-syntax 123-list ...), the name 123-LIST should be bound! 14:27:31 It's constructing a syntax object that has to do with the binding of `123-list'. 14:27:54 But somehow, that makes a big difference. 14:27:57 That's what `quote-syntax' means, AFAIK. 14:28:10 Right, but that doesn't make it any more special. 14:28:10 rudybot: eval (define-syntax 123-list (lambda (stx) #`',#'123-list)) 14:28:10 Riastradh: your sandbox is ready 14:28:11 Riastradh: Done. 14:28:15 rudybot: eval (123-list) 14:28:15 Riastradh: ; Value: ',#'123-list 14:28:27 Oops. 14:28:31 rudybot: eval (define-syntax 123-list (lambda (stx) #`'#,#'123-list)) 14:28:31 Riastradh: Done. 14:28:32 As I said above, you could have a primitive procedure that takes a symbol and does exactly that. 14:28:36 rudybot: eval (123-list) 14:28:36 Riastradh: ; Value: '123-list 14:28:50 ' strips the hygiene marker stuff, apparently. 14:28:52 But anyway, 14:29:05 Or you could do something like 14:29:16 rudybot: (datum->syntax #f 123-list) 14:29:17 stamourv: error: 123-list: undefined; cannot reference an identifier before its definition in module: 'program 14:29:21 rudybot: (datum->syntax #f '123-list) 14:29:21 stamourv: ; Value: # 14:29:27 No binding anywhere. 14:29:34 There's no reason why I shouldn't be able to take that form -- (lambda (stx) #`'#,#'123-list), or (lmabda (stx) ... (quote-syntax 123-list) ...), and move it outside the DEFINE-SYNTAX. 14:29:43 we need a witty name for the #`'#'#, style mess 14:29:48 the point of `quote-syntax' is to get the right binding from the expander. 14:29:49 ijp: Perl 14:29:50 maybe "quotation hell" 14:29:55 Riastradh: touche 14:30:16 rudybot: eval #`'#,#'123-list 14:30:16 stamourv: ; Value: # 14:30:36 No `define-syntax' or anything. 14:30:39 stamourv, there's no reason for the expander to be extending the language, though! There's no reason for the name 123-LIST to have a binding on the right-hand side of DEFINE-SYNTAX. 14:31:01 rudybot: eval (quote-syntax 123-list) 14:31:01 Riastradh: ; Value: # 14:31:10 Right, and if you don't care about the binding, you don't have to ask for it, you can use `datum->syntax'. 14:31:39 rudybot: eval (module a racket/base (provide syntax:123-list) (define syntax:123-list (quote-syntax 123-list))) 14:31:39 Riastradh: Done. 14:32:04 Am I being screwed up by rudybot's persistent environment? Your earlier example run through rudybot with QUOTE-SYNTAX failed. 14:32:14 rudybot: eval (module a racket/base (provide syntax:123-list) (define syntax:123-list (quote-syntax 124-list))) 14:32:14 Riastradh: Done. 14:32:17 I think this will fail when you `(require 'a)' 14:32:24 rudybot: eval (require a) 14:32:24 Riastradh: error: #:1:9: a: standard-module-name-resolver: collection not found collection: "a" in collection directories: /mnt/racket-5.3.2/collects in: a 14:32:52 That's 'a . 14:32:59 Oh, you wrote (provide a) instead of (provide foo) in that example. 14:33:00 it might be an idea to add a 'refresh' to rudybot, though you can probably just (exit) the sandbox you have 14:33:14 Riastradh: I made that mistake originally, then corrected it, I think. 14:33:25 ijp: You can do `init racket'. 14:33:38 rudybot: (module a racket/base (provide syntax:123-list) (define syntax:123-list (quote-syntax 123-list))) 14:33:38 Riastradh: Done. 14:33:52 stamourv: good point 14:34:57 rudybot: (module b0 racket/base (provide 123-list) (require-for-syntax a) (define-syntax 123-list (lambda (stx) (datum->syntax (list (datum->syntax syntax:123-list 'sqrt) (datum->syntax syntax:123-list 2)))))) 14:34:57 Riastradh: error: #:1:90: lambda: unbound identifier in the transformer environment; also, no #%app syntax transformer is bound at: lambda in: (lambda (stx) (datum->syntax (list (datum->syntax syntax:123-list (quote sqrt)) (datum->syntax syntax:123-list 2)))) 14:35:15 rudybot: (module b0 racket/base (provide 123-list) (require-for-syntax a) (define-syntax 123-list (lambda (stx) (datum->syntax (list (datum->syntax syntax:123-list '#%app) (datum->syntax syntax:123-list 'sqrt) (datum->syntax syntax:123-list 2)))))) 14:35:15 Riastradh: error: #:1:90: lambda: unbound identifier in the transformer environment; also, no #%app syntax transformer is bound at: lambda in: (lambda (stx) (datum->syntax (list (datum->syntax syntax:123-list (quote #%app)) (datum->syntax syntax:123-list (quote sqrt)) (datum->syntax syntax:123-list 2)))) 14:35:36 -!- peterhil [~peterhil@158.127.31.162] has quit [Quit: Must not waste too much time here...] 14:36:04 -!- gravicappa [~gravicapp@ppp91-77-180-34.pppoe.mtu-net.ru] has quit [Read error: Operation timed out] 14:36:13 Riastradh: Either use the `racket' language, or require `racket/base' for syntax. 14:36:13 rudybot: (module b1 racket/base (provide 123-list) (define-syntax 123-list (lambda (stx) (datum->syntax (list (datum->syntax (quote-syntax 123-list) '#%app) (datum->syntax (quote-syntax 123-list) 'sqrt) (datum->syntax (quote-syntax 123-list) 2)))))) 14:36:14 Riastradh: error: #:1:67: lambda: unbound identifier in the transformer environment; also, no #%app syntax transformer is bound at: lambda in: (lambda (stx) (datum->syntax (list (datum->syntax (quote-syntax 123-list) (quote #%app)) (datum->syntax (quote-syntax 123-list) (quote sqrt)) (datum->syntax (quote-syntax 123-list) 2)))) 14:36:21 Oh, I see. 14:36:32 rudybot: (module b0 racket/base (provide 123-list) (require-for-syntax a) (require-for-syntax racket/base) (define-syntax 123-list (lambda (stx) (datum->syntax (list (datum->syntax syntax:123-list '#%app) (datum->syntax syntax:123-list 'sqrt) (datum->syntax syntax:123-list 2)))))) 14:36:32 Riastradh: error: #:1:123: lambda: unbound identifier in the transformer environment; also, no #%app syntax transformer is bound at: lambda in: (lambda (stx) (datum->syntax (list (datum->syntax syntax:123-list (quote #%app)) (datum->syntax syntax:123-list (quote sqrt)) (datum->syntax syntax:123-list 2)))) 14:36:33 -!- userzxcvasdf [~neutral_a@c656847C1.dhcp.as2116.net] has quit [Remote host closed the connection] 14:36:59 Riastradh: Hold on, lemme try on my end, I can't read that anymore. 14:37:59 I think your outer `datum->syntax' is missing its first argument. 14:38:06 Oops, you're right. 14:38:41 That doesn't explain the `lambda: unbound identifier in the transformer environment' error, though. 14:39:18 Right, still looking. 14:40:14 If I use racket instead of racket/base, it thinks syntax:123-list is undefined. 14:40:25 Right, which it isn't. 14:40:31 Racket didn't change the semantics of require-for-syntax while I wasn't looking, did it? 14:40:57 Also, I tried with `(require (for-syntax ...))' instead of `(require-for-syntax ...)' (which is the preferred way of writing it) and it worked. 14:41:09 Sounds like a bug in `require-for-syntax', though. 14:41:15 Would you like to file a bug? 14:42:00 Oh wait, it looks `require-for-syntax' is only provided by mzscheme. 14:42:09 Not by racket/base 14:42:12 Now it can't find the module `a'. 14:42:43 Right, you need 'a 14:42:55 (for-syntax 'a)? 14:43:04 yes. 14:43:31 `a' without the quote would be the "a" collection, you want the `a' toplevel module, which is written `'a'. 14:44:45 Ok, figured out what was goign on with `require-for-syntax', I don't think it's a bug. 14:44:48 OK, here we go. 14:45:09 rudybot: eval (module a racket (provide syntax:123-list) (define syntax:123-list (quote-syntax 123-list))) 14:45:09 Riastradh: Done. 14:45:24 `require-for-syntax' is indeed not provided by `racket/base'. It's just that Racket complains about `lambda' being unbound before it complains about `require-for-syntax' being unbound. 14:45:49 rudybot: eval (module b0 racket (provide 123-list) (require (for-syntax 'a)) (define-syntax (123-list stx) (datum->syntax syntax:123-list (list (datum->syntax syntax:123-list 'sqrt) (datum->syntax syntax:123-list 2)))) 14:45:49 Riastradh: error: #:1:0: read: expected a `)' to close `(' 14:45:53 rudybot: eval (module b0 racket (provide 123-list) (require (for-syntax 'a)) (define-syntax (123-list stx) (datum->syntax syntax:123-list (list (datum->syntax syntax:123-list 'sqrt) (datum->syntax syntax:123-list 2))))) 14:45:53 Riastradh: Done. 14:46:02 -!- Kruppe [~user@CPE602ad0938e9a-CM602ad0938e97.cpe.net.cable.rogers.com] has quit [Remote host closed the connection] 14:46:12 rudybot: eval (module b1 racket (provide 123-list) (define-syntax (123-list stx) (datum->syntax (quote-syntax 123-list) (list (datum->syntax (quote-syntax 123-list) 'sqrt) (datum->syntax (quote-syntax 123-list) 2))))) 14:46:13 Riastradh: Done. 14:46:25 The difference between b0 and b1 is only syntax:123-list versus (quote-syntax 123-list). 14:46:52 -!- asumu_ is now known as asumu 14:46:59 This *should* be no difference at all, if there is no magic in the language for procedural macros, except... 14:47:04 Right, now try `(require 'b0)' and `(require 'b1)'. 14:47:06 -!- asumu [~at@2001:470:b:b7:1e6f:65ff:fe23:c3d4] has quit [Changing host] 14:47:06 asumu [~at@racket/asumu] has joined #scheme 14:47:17 rudybot: eval (module c0 racket (provide c0) (require 'b0) (define c0 (123-list))) 14:47:17 Riastradh: error: sqrt: unbound identifier; also, no #%app syntax transformer is bound at: sqrt in: (sqrt 2) 14:47:24 rudybot: eval (module c1 racket (provide c1) (require 'b1) (define c1 (123-list))) 14:47:24 Riastradh: Done. 14:47:57 Oh, I should demonstrate a third variant: 14:48:14 rudybot: eval (module a-procedure racket (provide (syntax:123-list)) (define (syntax:123-list) (quote-syntax 123-list))) 14:48:15 Riastradh: error: #:1:36: syntax:123-list: not a provide sub-form in: (syntax:123-list) 14:48:24 rudybot: eval (module a-procedure racket (provide syntax:123-list) (define (syntax:123-list) (quote-syntax 123-list))) 14:48:24 Riastradh: Done. 14:48:40 The only difference between a and a-procedure is that in a-procedure, syntax:123-list is a procedure. 14:49:15 rudybot: eval (module b0-procedure racket (provide 123-list) (require (for-syntax 'a-procedure)) (define-syntax (123-list stx) (datum->syntax (syntax:123-list) (list (datum->syntax (syntax:123-list) 'sqrt) (datum->syntax (syntax:123-list) 2))))) 14:49:15 Riastradh: Done. 14:49:16 That shouldn't make a difference. 14:49:16 -!- TheRealPygo is now known as pygospa 14:49:32 The bindings are both at phase 0, which is the part that matters. 14:49:34 rudybot: eval (module c0-procedure racket (provide c0p) (require 'b0-procedure) (define c0p (123-list))) 14:49:34 Riastradh: error: sqrt: unbound identifier; also, no #%app syntax transformer is bound at: sqrt in: (sqrt 2) 14:50:35 So, information is being transmitted *syntactically* when you write (define-syntax (123-list stx) ... (quote-syntax 123-list) ...) so that transforming that into (define-syntax (123-list stx) ... (syntax:123-list) ...) fails. 14:51:10 That's unnecessary magic, and it makes reasoning about -- and (automatically) testing -- macro transformers needlessly difficult. 14:51:33 As I said, `quote-syntax' looks things up by binding, so it matters whether its argument is bound in the current phase. 14:51:45 Is 123-list bound in the current phase? 14:51:56 If you `define-syntax' it, yes. 14:52:05 That is, when I write (define-syntax (123-list stx) ... (quote-syntax 123-list) ...) and I'm evaluating ... (quote-syntax 123-list) .... 14:52:28 No! That's ridiculous. There is no reason for the name 123-list to occur anywhere in the lexical environment when evaluating the right-hand side of a DEFINE-SYNTAX form. 14:53:25 If you're inside phase 0 code, it should be bound. 14:53:52 And `quote-syntax' looks things up at phase 0. 14:54:00 There's no reason for names inside phase 0 to influence the semantics of the program at phase 1. 14:54:27 The RHS of `define-syntax' is phase 1, but the contents of `quote-syntax' are phase 0. 14:54:39 That means that you can't take programs that are supposed to work at phase 1, and isolate them in a normal environment. 14:54:56 Sure you can. 14:55:04 No -- that's what I just showed doesn't work! 14:55:14 You just need to require the right things for template. 14:55:53 As long as everything is bound in the right phase, code should work, independent of absolute phase levels. 14:56:29 So you can certainly run your syntax object manipulation code at phase 0 to test it. 14:56:31 No. Right now, in Racket, the *semantics* of programs evaluated at phase n depends on what's going on (and what's bound) at all phases m < n. That's bogus. 14:56:54 If it weren't, then the transformation I described would work. 14:56:55 It only depends on them if you look at anything that's bound there. 14:57:06 But I'm not looking at anything that's bound there. 14:57:16 Yes, that's what `quote-syntax' does. 14:57:41 If you just want to build a dummy syntax object, no binding or anything, you should use `(datum->syntax #f ...)' 14:57:46 Then *every*macro* (or at least every nontrivial macro) has to `look at stuff that's bound there'. 14:57:50 -!- wingo [~wingo@194.183.97.113] has quit [Ping timeout: 256 seconds] 14:58:33 If you want to expand into, say, `lambda', then yes, you need to make sure that `lambda' is bound at the phase one below you. 14:58:50 Which can be accomplished with `(require (for-template))'. 14:59:11 -!- fadein_ is now known as fadein 14:59:24 I'm not sure I understand what you're trying to do. 14:59:24 That should be resolved when the expander proceeds to look at the output of the macro transformer and process it in the context of phase 0. 14:59:32 Are you trying to expand into code with unbound variables? 14:59:45 No! I'm trying to write macro transformers reliably. 14:59:50 And reason about them. 15:00:37 I don't see how ensuring that your template code has its dependencies bound prevents you from writing reliable macro transformers. 15:01:12 If anything, it *guarantees* that the code your transformers generate won't have its dependencies unbound. That sounds like reliability to me. 15:01:16 I can't reason about the program that is my macro transformer as a normal Scheme program. 15:02:00 True, you need to reason about binding, which most Scheme programs that don't manipulate programs don't need to do. 15:02:03 Instead, it has to have extra magic in it about the `for-template' environment. 15:02:06 But that's just part of the domain. 15:02:11 No, it's not! 15:02:17 You'd have the same problem if you were writing a compiler, or a typechecker. 15:02:21 No. 15:02:34 I can write a compiler in vanilla Scheme. 15:02:37 You're dealing with data with binding. 15:02:40 I can write a type checker in vanilla Scheme. 15:02:57 Yes, you can, but then you'd need to do the binding bookkeeping yourself. 15:03:02 Syntax objects do it for you. 15:03:05 I can write a compiler in vanilla C, or a type checker in vanilla C, too, and in principle there's no reason why I shouldn't be able to write a macro transformer in vanilla C as well. 15:03:27 It's just a matter of whether you want it in your data structure's internal invariants, or whether you want to maintain it yourself. 15:03:31 Syntax *objects* can do it, sure, but QUOTE-SYNTAX is a special operator -- not an object at run-time that is a syntax object. 15:03:36 Syntax objects do the former, you seem to want the latter. 15:04:24 Sorry, I got mixed up; what are the former and latter here? 15:04:30 If binding is part of your data structure's API, it makes sense to have operations like `quote-syntax' that deal with that part of the semantics. 15:05:11 Syntax objects deal with binding internally, and provide an API that deals with it. You seem to want to deal with binding in your own code, so having binding be part of the API looks unnecessary to you. 15:05:25 Is that an accurate summary of your position? 15:05:45 rurufufuss [~rurufufus@115-64-27-246.static.tpgi.com.au] has joined #scheme 15:05:50 If so, then I think I understand what you mean, and it seems we just want different APIs. 15:06:00 gravicappa [~gravicapp@ppp91-77-189-231.pppoe.mtu-net.ru] has joined #scheme 15:06:09 I want syntax objects, and you want something else. 15:06:11 No. The API for writing macro transformers must be a vanilla Scheme API -- reducible, more or less, to lambda and application, without extensions to the lexical environment. 15:06:25 Having a data structure called `syntax objects' is fine. 15:06:38 Having macros to make handling syntax objects more convenient is fine. 15:07:11 sstrickl [~sstrickl@pool-71-191-94-169.washdc.fios.verizon.net] has joined #scheme 15:07:11 -!- sstrickl [~sstrickl@pool-71-191-94-169.washdc.fios.verizon.net] has quit [Changing host] 15:07:11 sstrickl [~sstrickl@racket/sstrickl] has joined #scheme 15:07:11 Extending the lexical environment so that it makes a difference whether I write (quote-syntax 123-list) or syntax:123-list on the right-hand side of a DEFINE-SYNTAX form is not fine. 15:07:36 Transformations that are valid in every normal Scheme program are not valid with the QUOTE-SYNTAX extension. 15:08:05 *stamourv* sighs. 15:08:05 There's no reason you couldn't just make it look like this: 15:08:10 That's exactly what I said. 15:08:18 You want an API that doesn't deal with binding. 15:08:32 (define-syntax 123-list (lambda (stx operator) ...)) 15:08:48 Then instead of `(quote-syntax 123-list)', I'd write `operator'. 15:08:52 Which is why you don't think `quote-syntax' should query the environment. 15:08:59 That would be a normal Scheme API. 15:09:19 Ok, so do you agree with my summary of your position? 15:09:20 -!- turbopape [~turbopape@41.230.34.248] has quit [Ping timeout: 268 seconds] 15:09:21 For the meta-program, bindings should be a matter of normal data structures. 15:09:41 That is, bindings in the object-program. 15:10:49 When you say `syntax objects', do you mean `a data structure called syntax objects including normal procedures to operate on them, *and* extensions to the language's lexical environment, and a new special operator QUOTE-SYNTAX that queries this extension to the lexical environment'? 15:11:26 The word `object' in `syntax object' suggests to me that you're talking about nothing other than a vanilla data structure. 15:11:53 When I say "the syntax object API", I mean Racket's API, which includes operations about binding. I don't mean a hypothetical API with some other syntax object data structure that doesn't deal with binding. 15:12:41 This phrase `dealing with binding' -- what does it mean? 15:12:50 To me and, AFAIK, to most people using Racket's API (and probably Chez's as well), syntax objects contain binding information. 15:12:56 Does it mean `extending the semantics of the host language to include new things in the lexical environment'? 15:13:16 Or does it mean `a vanilla API with operations on an object-program's lexical environment'? 15:13:19 I mean, the data structure contains information about the environment, which things are bound, to what, and at which phase. 15:13:20 -!- edw [~edw@207.239.61.34] has quit [Quit: Computer has gone to sleep.] 15:14:43 You seem to be delibrately avoiding language that clarifies the critical issue here: that the API changes the semantics of the language by extending what the lexical environment can hold. 15:15:18 I don't know why you're avoiding this language in an attempt to summarize my position unless it's a rhetorical device to make my objection sound trivial. 15:16:13 I'm not deliberately avoiding anything. I may not be expressing myself clearly, though. Sorry about that. 15:16:46 I guess you could say it "changes the semantics of the language" because the API I'm talking about allows introspection into the environemtn. 15:17:02 Designing the API so that it has the property that it detects mistakes in expansion -- whether you write (datum->syntax (quote-syntax 123-list) 'lambada) or (datum->syntax operator 'lambada) or (datum->syntax (syntax:123-list) 'lambada) -- is an orthogonal issue, which has nothing to do with whether the API changes the semantics of the language it lives in. 15:17:49 So what changes to the semantics are you referring to, then? 15:18:24 edw [~edw@207.239.61.34] has joined #scheme 15:18:25 In (define-syntax (123-list stx) ...), the lexical environment for `...' has to hold a magic binding for the name 123-list so that quote-syntax will DTRT with it. 15:18:34 There's no other meaning for the name 123-list in that environment. 15:19:56 In that RHS, yes, `123-list' is bound at phase 0 to the syntax you're defining. Which is desirable, otherwise how could you expand into a use of that macro? 15:20:17 There's nothing magic about it, it's just a plain syntax binding. 15:21:20 turbopape [~turbopape@41.228.40.9] has joined #scheme 15:21:27 The lexical environment in the right-hand side of the DEFINE-SYNTAX form shouldn't hold any non-normal Scheme bindings related to phase 0. 15:21:55 That is, maybe, in (define-syntax (123-list stx operator) ...), the name OPERATOR will be bound to a variable whose value will be related to phase 0 stuff, but nothing about phase 0 should influence whether or not the code on the right-hand side can *compile*. 15:22:07 What is a non-normal Scheme binding? 15:22:14 Whatever `123-list' is. 15:22:18 ...bound to. 15:22:32 If, next to that macro, you do `(define (helper x) ...)', you want that to be bound, so you can expand into it, right? 15:22:54 Similarly, if you define a helper macro, you may want to expand into uses of it as well, right? 15:23:18 In order for either of those cases to work, the helpers need to be bound at phase 0. 15:23:51 There's no reason for the name HELPER to be stored in the lexical environment of the program that is compiled to yield a macro transformer. 15:24:00 Let's say we write macro transformers in C instead. 15:24:35 int xform_123_list(struct syntax *input, struct syntax **output) { ... } 15:26:01 Where would you keep track of phase 0 binding? 15:26:11 In the library! 15:26:33 Anyway, I have to run off now. 15:26:45 Ok, with Racket's API they're tracked by ther expander. 15:27:03 Ok, nice talking to you. See you later. 15:27:05 Right, and that's a language design mistake. A library shouldn't require fundamental changes to the semantics of the language! 15:27:24 Ok, I think we understand each other now. 15:27:33 Thanks for your patience! 15:28:15 To end on a positive note: at least we're both in agreement with the statement that started the discussion: procedural macros matter, even though we disagree on the specifics. :) 15:28:21 Thanks for the talk! 15:28:27 No problem, soo you later! 15:28:46 *poof* 15:28:54 rudybot: these polite conversations on the internet are a sign of the end times 15:28:55 ijp: It's the most polite place in the universe. 15:28:59 er, s/oo/ee/ 15:29:09 (*peef*?) 15:29:16 Nah, for mine. 15:29:25 *peef*! 15:29:35 It's rude to s/x/y/ other people's lines. ;) 15:29:54 s,s/x/y/,tr -d ' ',g 15:30:25 x="'`printf '%s' "$x" | sed -e 's"'"'"'"'"'"'\\"'"'"'\\"'"'"'"g'`'" 15:30:41 Ka-*POOF*! (for real) 15:32:46 Cromulent [~Cromulent@cpc1-reig5-2-0-cust251.6-3.cable.virginmedia.com] has joined #scheme 15:39:12 -!- edw [~edw@207.239.61.34] has quit [Quit: Computer has gone to sleep.] 15:42:33 Kruppe [~user@j2petkovich.uwaterloo.ca] has joined #scheme 15:51:31 kobain [~kobian@unaffiliated/kobain] has joined #scheme 15:52:05 -!- alexei_ [~amgarchin@theo1.theochem.tu-muenchen.de] has quit [Ping timeout: 248 seconds] 15:54:29 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 240 seconds] 15:59:44 -!- CADD [~CADD@12.227.104.109] has quit [Ping timeout: 260 seconds] 16:01:41 CADD [~CADD@12.227.104.109] has joined #scheme 16:04:53 -!- epsylon [~epsylon@abbaye.thele.me] has quit [Ping timeout: 240 seconds] 16:05:01 edw [~edw@207.239.61.34] has joined #scheme 16:05:10 -!- turbopape [~turbopape@41.228.40.9] has quit [Ping timeout: 246 seconds] 16:05:37 -!- tenq is now known as tenq|away 16:07:30 -!- YoungFrog [~youngfrog@geodiff-mac3.ulb.ac.be] has quit [Quit: Planned power cut -- see you later.] 16:08:12 epsylon [~epsylon@abbaye.thele.me] has joined #scheme 16:11:05 -!- tenq|away is now known as tenq 16:12:14 -!- superjudge [~mjl@37-46-176-69.customers.ownit.se] has quit [Ping timeout: 268 seconds] 16:14:29 -!- MichaelRaskin [~MichaelRa@195.178.216.22] has quit [Quit: MichaelRaskin] 16:19:13 -!- add^_ [~user@m5-241-132-120.cust.tele2.se] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 16:27:24 -!- Cromulent [~Cromulent@cpc1-reig5-2-0-cust251.6-3.cable.virginmedia.com] has quit [Quit: KVIrc 4.2.0 Equilibrium http://www.kvirc.net/] 16:32:08 kuribas [~user@d54C430B0.access.telenet.be] has joined #scheme 16:42:10 -!- ASau` is now known as ASau 16:49:31 `fogus [~fogus@freedom.d-a-s.com] has joined #scheme 17:08:11 -!- rszeno [~rszeno@79.114.79.171] has quit [Quit: Leaving.] 17:21:51 MichaelRaskin [~MichaelRa@195.91.224.161] has joined #scheme 17:23:13 -!- b4283 [~b4283@118.150.139.66] has quit [Remote host closed the connection] 17:24:52 -!- jaimef [jaimef@dns.mauthesis.com] has quit [Excess Flood] 17:29:17 flux0r [6cf7d9b9@gateway/web/freenode/ip.108.247.217.185] has joined #scheme 17:31:19 jaimef [jaimef@dns.mauthesis.com] has joined #scheme 17:44:19 -!- flux0r [6cf7d9b9@gateway/web/freenode/ip.108.247.217.185] has quit [Ping timeout: 250 seconds] 17:45:04 flux0r [6cf7d9b9@gateway/web/freenode/ip.108.247.217.185] has joined #scheme 17:51:57 -!- jrapdx [~jra@c-98-246-145-216.hsd1.or.comcast.net] has quit [Remote host closed the connection] 17:57:11 ffio [~fire@unaffiliated/security] has joined #scheme 17:57:39 -!- ffio is now known as hack 17:57:59 -!- hack is now known as nerd 18:08:10 -!- nerd is now known as baba 18:08:42 -!- baba [~fire@unaffiliated/security] has quit [Quit: WeeChat 0.4.1] 18:29:20 mmc1 [~michal@j212142.upc-j.chello.nl] has joined #scheme 18:30:29 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Ping timeout: 248 seconds] 18:31:05 preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #scheme 18:43:18 alexei_ [~amgarchin@p4FD63334.dip0.t-ipconnect.de] has joined #scheme 18:46:25 -!- cdidd [~cdidd@128-68-34-247.broadband.corbina.ru] has quit [Remote host closed the connection] 18:49:13 cdidd [~cdidd@89-178-196-162.broadband.corbina.ru] has joined #scheme 18:54:36 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 19:06:20 Okasu [~1@unaffiliated/okasu] has joined #scheme 19:09:13 -!- ASau [~user@p4FF96FA0.dip0.t-ipconnect.de] has quit [Ping timeout: 268 seconds] 19:09:16 -!- CADD [~CADD@12.227.104.109] has quit [Quit: Lost terminal] 19:12:08 rszeno [~rszeno@79.114.93.50] has joined #scheme 19:15:49 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 240 seconds] 19:18:08 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 19:18:39 ASau [~user@p4FF96FA0.dip0.t-ipconnect.de] has joined #scheme 19:29:49 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 240 seconds] 19:38:13 theseb [~cs@74.194.237.26] has joined #scheme 19:38:16 -!- brianloveswords [~brianlove@li124-154.members.linode.com] has quit [Excess Flood] 19:38:54 -!- NihilistDandy [~ND@c-24-128-161-213.hsd1.nh.comcast.net] has quit [Quit: NihilistDandy] 19:39:07 brianloveswords [~brianlove@li124-154.members.linode.com] has joined #scheme 19:39:10 spec says to implement lexical scoping....lambda function "need to remember the environment they were created in"......rather than dragging a copy of the environment around with the lambda func.....couldnt' one just eval all the free variables ? 19:39:34 ....after all..it is the free vars that the env takes care of right? 19:39:58 but it's the free variables at the time of creation that are meant 19:40:19 C-Keen: at time of creation of what? the lambda func? 19:40:22 if you look them up at runtime then you would get dynamic scoping 19:40:46 theseb: yese 19:42:00 C-Keen: i only see 2 options when a scheme implementation creates a lambda func....1. drag around a copy of the env or 2. replace free vars immediately using env....i don't see any diff there...if I'm missing the "correct" 3rd option please advise 19:43:08 I don't see why 1. is wrong 19:43:29 C-Keen: 1 is *right*...that is what r7rs says 19:43:46 so your question is? 19:43:50 C-Keen: but to simplify my implementation.....i'm trying to confirm if 2 is an equivalent hack 19:44:20 what if the lambda mutates the free variable? 19:44:38 hmm 19:44:42 um 19:45:14 well if lambda changes the free var then it isn't free right? 19:45:19 it may as well be a local var 19:45:27 ( i think) 19:45:31 (i'm a newb at this) 19:45:41 (let ((count 0)) (define (add-one) (set! count (+ count 1)) count)) 19:46:17 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 19:46:57 ijp` [~user@host86-184-177-29.range86-184.btcentralplus.com] has joined #scheme 19:47:04 C-Keen: wait...is that allowed? 19:47:15 C-Keen: you are "defining" add-one in terms of a set!? 19:47:31 hell even i know the return val of a set! expression is unspecified 19:47:49 I am returning count at the end (or did I misplace parens?) 19:47:56 C-Keen: ok.. 19:48:07 I'll take your word for it the define sexps allow multiple exps 19:48:09 makes sense 19:48:18 it implies a begin clause 19:48:25 count isn't a free var is it? 19:48:49 man i seriously need to do more work to understand and implement lexical scoping 19:48:51 for add-one it is? 19:49:28 ah ok 19:49:29 yea 19:49:40 -!- ijp [~user@host109-153-30-69.range109-153.btcentralplus.com] has quit [Ping timeout: 256 seconds] 19:49:58 theseb, look for Bruijn indexes 19:50:01 so if you would just replace the count as you said in 2. what would be the effect of set!? 19:51:47 C-Keen: ok you win.....i'll go read more :) 19:52:48 theseb: it's ok, mutation sucks ;) 19:58:29 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 240 seconds] 20:06:05 NihilistDandy [~ND@c-24-128-161-213.hsd1.nh.comcast.net] has joined #scheme 20:16:59 ehaliewicz [~user@50-0-51-11.dsl.static.sonic.net] has joined #scheme 20:24:55 add^_ [~user@m5-241-132-120.cust.tele2.se] has joined #scheme 20:33:37 tupi [~user@139.82.89.157] has joined #scheme 20:34:35 has anyone had a look at implementing a scheme->llvm IR compiler? 20:38:51 -!- `fogus is now known as fogus|away 20:41:39 -!- ijp` is now known as ijp 20:45:22 -!- gravicappa [~gravicapp@ppp91-77-189-231.pppoe.mtu-net.ru] has quit [Remote host closed the connection] 20:45:36 doldrim [~doldrim@nat/cisco/x-vpruhcqjsmlyixvg] has joined #scheme 20:46:07 -!- doldrim [~doldrim@nat/cisco/x-vpruhcqjsmlyixvg] has left #scheme 20:48:07 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Ping timeout: 260 seconds] 20:51:21 araujo [~araujo@gentoo/developer/araujo] has joined #scheme 20:52:35 myrkraverk [~johann@unaffiliated/myrkraverk] has joined #scheme 20:52:46 -!- edw [~edw@207.239.61.34] has quit [Quit: Computer has gone to sleep.] 20:54:56 -!- Kruppe [~user@j2petkovich.uwaterloo.ca] has quit [Remote host closed the connection] 20:57:26 youlysses [~user@24-217-211-79.dhcp.stls.mo.charter.com] has joined #scheme 21:09:50 Riastradh [~riastradh@fsf/member/riastradh] has joined #scheme 21:13:50 -!- davexunit [~user@38.104.7.18] has quit [Quit: Later] 21:18:21 ecloud [~quassel@46.157.237.248.tmi.telenormobil.no] has joined #scheme 21:20:40 edw [~edw@207.239.61.34] has joined #scheme 21:34:09 -!- Riastradh [~riastradh@fsf/member/riastradh] has quit [Ping timeout: 240 seconds] 21:34:29 -!- hive-mind [pranq@unaffiliated/contempt] has quit [Ping timeout: 248 seconds] 21:37:02 -!- ecloud [~quassel@46.157.237.248.tmi.telenormobil.no] has quit [Read error: Connection reset by peer] 21:39:40 -!- brianloveswords [~brianlove@li124-154.members.linode.com] has quit [Excess Flood] 21:42:07 brianloveswords [~brianlove@li124-154.members.linode.com] has joined #scheme 21:42:34 hive-mind [pranq@unaffiliated/contempt] has joined #scheme 21:48:52 foeniks [~fevon@p57A5CE20.dip0.t-ipconnect.de] has joined #scheme 21:54:26 -!- alexei_ [~amgarchin@p4FD63334.dip0.t-ipconnect.de] has quit [Quit: Konversation terminated!] 21:54:33 alexei_ [~amgarchin@p4FD63334.dip0.t-ipconnect.de] has joined #scheme 21:56:31 -!- Okasu [~1@unaffiliated/okasu] has quit [Quit: leaving] 22:01:26 -!- add^_ [~user@m5-241-132-120.cust.tele2.se] has quit [Quit: Lambda Calculus is *awesome*] 22:02:05 -!- tupi [~user@139.82.89.157] has quit [Ping timeout: 245 seconds] 22:19:42 -!- kuribas [~user@d54C430B0.access.telenet.be] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 22:21:24 -!- zbigniew [~zb@3e8.org] has quit [Ping timeout: 256 seconds] 22:26:50 -!- Nisstyre [~yours@oftn/member/Nisstyre] has quit [Quit: Leaving] 22:27:38 Kruppe [~user@CPE602ad0938e9a-CM602ad0938e97.cpe.net.cable.rogers.com] has joined #scheme 22:29:37 m4burns [m4burns@taurine.csclub.uwaterloo.ca] has joined #scheme 22:38:54 [OT] just in case anybody wants to compete in the ICFP programming contest next w/e, deadline for registration is 90 minutes from now. Look: http://research.microsoft.com/en-us/events/icfpcontest2013/ 22:42:50 cool 22:46:13 -!- Kruppe [~user@CPE602ad0938e9a-CM602ad0938e97.cpe.net.cable.rogers.com] has quit [Remote host closed the connection] 22:46:31 -!- alexei_ [~amgarchin@p4FD63334.dip0.t-ipconnect.de] has quit [Quit: Konversation terminated!] 22:46:49 icfp vs sleep? sleep wins 22:47:06 kobain_ [~kobian@unaffiliated/kobain] has joined #scheme 22:47:07 -!- ijp [~user@host86-184-177-29.range86-184.btcentralplus.com] has quit [Quit: The garbage collector got me] 22:47:26 ijp: that's what's prevented me in the past... though I did try once (on that alien image one) 22:48:54 alexei_ [~amgarchin@p4FD63334.dip0.t-ipconnect.de] has joined #scheme 22:50:28 -!- kobain [~kobian@unaffiliated/kobain] has quit [Ping timeout: 246 seconds] 22:56:32 -!- kobain_ is now known as kobain 22:59:17 -!- edw [~edw@207.239.61.34] has quit [Quit: Computer has gone to sleep.] 22:59:45 zbigniew [~zb@3e8.org] has joined #scheme 23:02:30 -!- mlamari [~quassel@cpe-70-112-159-86.austin.res.rr.com] has quit [Ping timeout: 245 seconds] 23:09:10 -!- vishesh [~vishesh@103.26.217.94] has quit [Ping timeout: 245 seconds] 23:35:26 -!- foeniks [~fevon@p57A5CE20.dip0.t-ipconnect.de] has quit [Quit: Leaving] 23:37:29 fridim__ [~fridim@bas2-montreal07-2925317871.dsl.bell.ca] has joined #scheme 23:45:29 tabemann [~travisb@adsl-69-210-142-102.dsl.milwwi.ameritech.net] has joined #scheme 23:51:22 -!- kobain [~kobian@unaffiliated/kobain] has quit [Quit: El motor por excelencia http://www.europio.org/]