2015-02-21T00:00:32Z vaporatorius quit (Remote host closed the connection) 2015-02-21T00:07:37Z munksgaard quit (Read error: Connection reset by peer) 2015-02-21T00:09:49Z EvW quit (Ping timeout: 265 seconds) 2015-02-21T00:17:32Z rszeno joined #lisp 2015-02-21T00:18:47Z dstatyvka left #lisp 2015-02-21T00:36:25Z larion quit (Ping timeout: 264 seconds) 2015-02-21T00:36:34Z ejbs quit (Ping timeout: 255 seconds) 2015-02-21T00:36:51Z Mawile joined #lisp 2015-02-21T00:41:09Z hitecnologys_ joined #lisp 2015-02-21T00:43:35Z lispyone joined #lisp 2015-02-21T00:44:13Z hitecnologys quit (Ping timeout: 264 seconds) 2015-02-21T00:44:26Z PinealGlandOptic quit (Quit: leaving) 2015-02-21T00:45:50Z j0nii quit (Ping timeout: 246 seconds) 2015-02-21T00:51:52Z theseb quit (Ping timeout: 255 seconds) 2015-02-21T00:52:30Z karswell quit (Read error: Connection reset by peer) 2015-02-21T00:59:11Z lispyone quit (Remote host closed the connection) 2015-02-21T01:03:53Z PaulCapestany quit 2015-02-21T01:04:21Z toillb|aw joined #lisp 2015-02-21T01:04:29Z toillb|aw left #lisp 2015-02-21T01:05:26Z PaulCapestany joined #lisp 2015-02-21T01:06:38Z theseb joined #lisp 2015-02-21T01:08:44Z larion joined #lisp 2015-02-21T01:10:18Z lispyone joined #lisp 2015-02-21T01:10:33Z hiyosi quit (Quit: My Mac has gone to sleep. ZZZzzz…) 2015-02-21T01:17:52Z |3b| quit (Read error: Connection reset by peer) 2015-02-21T01:18:04Z Kanae quit (Read error: Connection reset by peer) 2015-02-21T01:19:01Z |3b| joined #lisp 2015-02-21T01:21:46Z Guthur` joined #lisp 2015-02-21T01:22:18Z axion quit (Quit: WeeChat 1.0) 2015-02-21T01:22:34Z axion joined #lisp 2015-02-21T01:22:35Z axion quit (Client Quit) 2015-02-21T01:22:57Z axion joined #lisp 2015-02-21T01:22:58Z axion quit (Client Quit) 2015-02-21T01:29:03Z nikki93 joined #lisp 2015-02-21T01:29:39Z nikki93 quit (Remote host closed the connection) 2015-02-21T01:32:27Z Bicyclidine quit (Quit: annoy) 2015-02-21T01:35:42Z lispyone quit (Remote host closed the connection) 2015-02-21T01:37:18Z larion quit (Ping timeout: 265 seconds) 2015-02-21T01:40:04Z bb010g quit (Quit: Connection closed for inactivity) 2015-02-21T01:40:55Z zacts quit (Ping timeout: 255 seconds) 2015-02-21T01:44:20Z theos quit (Disconnected by services) 2015-02-21T01:44:53Z theos joined #lisp 2015-02-21T01:47:21Z k-dawg joined #lisp 2015-02-21T01:47:59Z linux_dream joined #lisp 2015-02-21T01:49:09Z lispyone joined #lisp 2015-02-21T01:56:31Z Petit_Dejeuner_ quit (Ping timeout: 250 seconds) 2015-02-21T02:00:10Z camm` joined #lisp 2015-02-21T02:00:30Z Vutral quit (Ping timeout: 265 seconds) 2015-02-21T02:03:46Z PinealGlandOptic joined #lisp 2015-02-21T02:07:11Z devll joined #lisp 2015-02-21T02:11:07Z axion joined #lisp 2015-02-21T02:11:08Z axion quit (Client Quit) 2015-02-21T02:12:17Z axion joined #lisp 2015-02-21T02:14:36Z Petit_Dejeuner_ joined #lisp 2015-02-21T02:20:26Z Vutral joined #lisp 2015-02-21T02:21:55Z zhangyh26258 joined #lisp 2015-02-21T02:22:00Z defaultxr joined #lisp 2015-02-21T02:23:00Z c74d quit (Read error: Connection reset by peer) 2015-02-21T02:23:46Z cpc26 quit (Read error: Connection timed out) 2015-02-21T02:26:49Z jlongster joined #lisp 2015-02-21T02:26:49Z cpc26 joined #lisp 2015-02-21T02:31:37Z jlongster quit (Ping timeout: 264 seconds) 2015-02-21T02:32:35Z dafunktion quit (Remote host closed the connection) 2015-02-21T02:35:48Z zhangyh26258 quit (Remote host closed the connection) 2015-02-21T02:38:27Z scymtym quit (Ping timeout: 252 seconds) 2015-02-21T02:40:29Z edgar-rft quit (Quit: bye...) 2015-02-21T02:43:54Z lispyone quit (Remote host closed the connection) 2015-02-21T02:45:33Z trystero joined #lisp 2015-02-21T02:48:34Z tristero quit (Ping timeout: 244 seconds) 2015-02-21T02:50:09Z ASau quit (Ping timeout: 256 seconds) 2015-02-21T02:52:28Z vdamewood quit (Quit: ["Textual IRC Client: www.textualapp.com"]) 2015-02-21T02:53:02Z c74d joined #lisp 2015-02-21T02:53:52Z linux_dream quit (Quit: Leaving) 2015-02-21T02:56:08Z axion quit (Quit: WeeChat 1.0) 2015-02-21T02:56:31Z axion joined #lisp 2015-02-21T03:01:16Z theos quit (Disconnected by services) 2015-02-21T03:01:45Z theos joined #lisp 2015-02-21T03:02:31Z kapil___ joined #lisp 2015-02-21T03:04:26Z paroneayea quit (Read error: Connection reset by peer) 2015-02-21T03:04:47Z paroneayea joined #lisp 2015-02-21T03:04:51Z fragamus quit (Ping timeout: 252 seconds) 2015-02-21T03:05:52Z yrdz left #lisp 2015-02-21T03:06:00Z yrdz joined #lisp 2015-02-21T03:06:34Z burtons joined #lisp 2015-02-21T03:07:30Z burtons: anybody on ever get opengenera running? every time I try and run it it locks up my X server, even in a VM running old versions of ubuntu 7.10. 2015-02-21T03:07:38Z bb010g joined #lisp 2015-02-21T03:08:11Z burtons: i'm going back even older to 6.4 to see if that works, but i'm wondering if i'm missing some incantation to keep it from locking the display 2015-02-21T03:08:25Z joshe joined #lisp 2015-02-21T03:08:41Z burtons: on 7.10 it got cold booting futher than i've ever seen it, but still...locks up 2015-02-21T03:11:15Z JokesOnYou77 joined #lisp 2015-02-21T03:11:18Z JokesOnYou77: Hi all 2015-02-21T03:11:24Z burtons: howdy 2015-02-21T03:12:35Z moei joined #lisp 2015-02-21T03:13:14Z k-dawg quit (Quit: This computer has gone to sleep) 2015-02-21T03:13:59Z yaewa quit (Ping timeout: 245 seconds) 2015-02-21T03:14:14Z modula joined #lisp 2015-02-21T03:16:24Z beach joined #lisp 2015-02-21T03:16:34Z beach: Good morning everyone! 2015-02-21T03:16:37Z defaultxr quit (Ping timeout: 264 seconds) 2015-02-21T03:16:45Z modula is now known as defaultxr 2015-02-21T03:20:10Z beach: drmeister: Do you still have things you want to talk to me about? 2015-02-21T03:20:36Z burtons: beach: have you ever gotten opengenera to run properly? 2015-02-21T03:20:51Z beach: burtons: No, sorry. 2015-02-21T03:21:08Z burtons: i saw some old conversations with you about it so i thought i would ask 2015-02-21T03:21:23Z burtons: even on old x servers it just locks up the whole screen 2015-02-21T03:21:36Z zacharias_ joined #lisp 2015-02-21T03:21:58Z beach: There were some other people here talking about it I believe. Did you check the logs? 2015-02-21T03:22:12Z burtons: i've found some old logs from 2013 2015-02-21T03:22:30Z beach: I recall a more recent discussion. 2015-02-21T03:22:35Z burtons: i'm just going back and back in ubuntu versions to see if one actually works 2015-02-21T03:22:42Z burtons: i've tried 7.10, now 6.04 2015-02-21T03:23:26Z burtons: 7.10 got the furthest, i got the cold boot window and the main window popped up but after that the whole screen just locks up 2015-02-21T03:24:41Z burtons: if i do ever get it working, tham vm is going to be precious 2015-02-21T03:24:52Z burtons: that vm, i mean 2015-02-21T03:25:01Z zacharias quit (Ping timeout: 252 seconds) 2015-02-21T03:25:39Z jlongster joined #lisp 2015-02-21T03:28:31Z theos quit (Disconnected by services) 2015-02-21T03:28:58Z drmeister: beach: Yes - but I'm on a train going under Philadelphia- will be in contact in a few min. 2015-02-21T03:29:00Z theos joined #lisp 2015-02-21T03:29:10Z beach: drmeister: OK. 2015-02-21T03:29:33Z drmeister: I'm out. 2015-02-21T03:30:20Z JokesOnYou77: Trying to make a binary tree from a list. It looks like it's going to be a nexted recursion and I'm having trouble seeing it: (1 2 3 4 5) => (1 (2 (4 5)) (3)) just breadth-first. 2015-02-21T03:30:25Z jlongster quit (Ping timeout: 264 seconds) 2015-02-21T03:30:27Z MrWoohoo quit (Quit: ["Textual IRC Client: www.textualapp.com"]) 2015-02-21T03:30:27Z drmeister: How do specials get handled? e.g.: (defvar *a* 1) (let ((*a* 2)) (print *a*)) 2015-02-21T03:30:56Z drmeister: It's somewhere between Sexp -> AST - the most mysterious part of Cleavir for me at this point. 2015-02-21T03:31:13Z Bike: JokesOnYou77: you mean you want that output? 2015-02-21T03:31:26Z beach: drmeister: DEFVAR is a macro, so it gets handled the way you expand it. 2015-02-21T03:31:32Z JokesOnYou77: Bike, yes 2015-02-21T03:32:18Z Bike: why is the three on the end and why does the top list have three elementS? 2015-02-21T03:32:40Z nyef: Oh. Hello, beach. 2015-02-21T03:32:40Z beach: drmeister: I'll check about references to special variables. 2015-02-21T03:32:47Z drmeister: beach: Right - but you have CONVERT-SPECIAL - it has a lot of methods. 2015-02-21T03:33:32Z beach: drmeister: Checking now. I do something special (pun intended) in SICL, so I must look. 2015-02-21T03:33:53Z JokesOnYou77: Bike, it's a binary tree, 1 has two children, 2 and 3, 2 has two children, 3 and 5, 3 has no children. It's as if you were conducting a breadth first search from left to right. 2015-02-21T03:34:15Z JokesOnYou77: *2 has children, 4 and 5 2015-02-21T03:34:33Z beach: drmeister: CONVERT-SPECIAL converts special forms. 2015-02-21T03:34:37Z drmeister: beach: I think I need to deal with specials first and then non-local exits. 2015-02-21T03:34:50Z drmeister: Oh - so not necessarily special variables. 2015-02-21T03:35:16Z beach: drmeister: There is a CONVERT-SPECIAL-VARIABLE in convert-form.lisp 2015-02-21T03:35:19Z Bike: JokesOnYou77: shouldn't it be (2 (4) (5)) then? 2015-02-21T03:35:35Z oleo is now known as Guest68710 2015-02-21T03:35:51Z drmeister: Special forms - got it. Common Lisp overloads special like (but not as bad as) C++ overloads "virtual". 2015-02-21T03:36:22Z beach: drmeister: By default convert-special-variable generates a SYMBOL-VALUE-AST. 2015-02-21T03:37:25Z oleo__ joined #lisp 2015-02-21T03:37:59Z JokesOnYou77: Bike, Hmmm...have to think about that. I guess I would prefer if the terminal nodes were non-null as the purpose is really just to hold data that will be used by something else. I'm dealing with functions that take s-expressions as input but aren't actually under my control. 2015-02-21T03:38:48Z beach: drmeister: And SYMBOL-VALUE-AST is compiled to SYMBOL-VALUE-INSTRUCTION. 2015-02-21T03:38:57Z Guest68710 quit (Ping timeout: 250 seconds) 2015-02-21T03:39:38Z drmeister: I have (defvar *a* 1) 2015-02-21T03:39:39Z drmeister: (cleavir-compile 'spectest '(lambda (x) (let ((*a* 2)) (format t "inner *a* = ~a~%" *a*)) (format t "outer *a*=~a~%" *a*))) 2015-02-21T03:39:47Z drmeister: It's throwing an error. 2015-02-21T03:39:48Z Bike: JokesOnYou77: then it would be (1 (2 4 5) 3). anyway, let me think a bit. i think you could basically go through the list by twos keeping a stack of the last node to give children to. 2015-02-21T03:40:15Z urandom__ quit (Quit: Konversation terminated!) 2015-02-21T03:40:50Z beach: drmeister: Terminology thing: in Common Lisp errors are not "thrown". They are "signaled". 2015-02-21T03:41:17Z nyef: "throw" is reserved for CATCH tags, is it not? 2015-02-21T03:41:17Z drmeister: Got it. C++ is a bit more of a knuckle dragging language. 2015-02-21T03:41:20Z JokesOnYou77: Bike, then I may be mischaracterizing it. The format I need for the next function is (1 (2 (4 5)) (3)) 2015-02-21T03:41:29Z JokesOnYou77: Bike, and thank you. 2015-02-21T03:41:33Z beach: nyef: I believe so. 2015-02-21T03:41:49Z JokesOnYou77: drmeister, that is a quotable lol 2015-02-21T03:42:12Z Bike: JokesOnYou77: i don't understand how that format makes sense then. i mean, is "tree with head c and nodes a and b" (c (a b)) or (c a b)? you have both in that one line, and then also the terminal node thing. 2015-02-21T03:42:56Z beach: drmeister: I can't reproduce your error here because I don't use SYMBOL-VALUE-AST or SYMBOL-VALUE-INSTRUCTION in SICL, and I still haven't set up a Clasp-like environment. 2015-02-21T03:43:20Z drmeister: In CLEAVIR-GENERATE-AST:CONVERT-SPECIAL-BINDING it's calling (cleavir-env:function-info global-env function-name) where function-name == CLEAVIR-PRIMOP:CALL-WITH-VARIABLE-BOUND 2015-02-21T03:43:27Z drmeister: That appears to be returning NIL 2015-02-21T03:44:13Z JokesOnYou77: Bike, the terminal nodes thing was my mischaracterization. And I see what you mean now. Let me look at the input format again 2015-02-21T03:44:18Z beach: drmeister: That's normal. 2015-02-21T03:44:55Z beach: drmeister: By default, binding a special variable generates a call to that function, and if you want the default, you need to define that function. 2015-02-21T03:45:06Z drmeister: Hmm, it's getting into convert-global-function with info == NIL 2015-02-21T03:45:24Z vlnx quit (Ping timeout: 244 seconds) 2015-02-21T03:45:26Z drmeister: So (cleavir-env:name info) is failing because info == NIL 2015-02-21T03:45:34Z beach: drmeister: That's normal. 2015-02-21T03:45:38Z drmeister: Must get off train in a minute - back in 5. 2015-02-21T03:45:38Z beach: drmeister: By default, binding a special variable generates a call to that function, and if you want the default, you need to define that function. 2015-02-21T03:46:59Z drmeister: Wow 2015-02-21T03:47:21Z beach: Hmm, 5 minutes pass faster and faster these days. 2015-02-21T03:47:26Z vlnx joined #lisp 2015-02-21T03:47:32Z beach thinks maybe he meant seconds. 2015-02-21T03:47:37Z drmeister: I was just getting off the train and this guy sitting next to me asked: is that Clasp? 2015-02-21T03:47:46Z Bike: wow, you're famous. 2015-02-21T03:47:48Z beach: Heh! 2015-02-21T03:47:56Z Bike: are there papparazzi around? 2015-02-21T03:48:07Z drmeister: I'm sitting on a train next to a random stranger and they knew Clasp 2015-02-21T03:48:41Z JokesOnYou77: that 2015-02-21T03:48:45Z JokesOnYou77: 's awesome 2015-02-21T03:49:16Z drmeister: Dammit I should have said "come find me" 2015-02-21T03:49:40Z nikki93 joined #lisp 2015-02-21T03:50:27Z lowryder joined #lisp 2015-02-21T03:50:55Z JokesOnYou77: bike, you're right, it should be (1 (2 (4) (5)) (3)) 2015-02-21T03:52:02Z JokesOnYou77: Bike: ex: (3 (2 It) (4 (4 (2 's) (4 (3 (2 a) (4 (3 lovely) (2 film))) (3 (2 with) (4 (3 (3 lovely) (2 performances)) (2 (2 by) (2 (2 (2 Buy) (2 and)) (2 Accorsi))))))) (2 .))) 2015-02-21T03:52:18Z Bike: you changed the terminal nodes again :) 2015-02-21T03:52:26Z Bike: but whatever, let me try to write it. 2015-02-21T03:52:46Z enitiz joined #lisp 2015-02-21T03:53:11Z nikki93 quit (Remote host closed the connection) 2015-02-21T03:55:44Z Bike: (defun ->tree (list) (let* ((result (list (first list))) (stack (list result))) (loop for (a b) on (rest list) by #'cddr do (let ((a (list a)) (b (list b))) (loop for elem in stack when (null (rest elem)) do (setf (rest elem) (list a b)) (push a stack) (push b stack))) finally (return result))) 2015-02-21T03:55:50Z Bike: that is almost certainly wrong, of course 2015-02-21T03:56:45Z beach: nyef: What are you working on these days? 2015-02-21T03:56:48Z Bike: ^it is, and what excitingly wrong output 2015-02-21T03:58:14Z JokesOnYou77: Rofl. 2015-02-21T03:58:19Z Bike: ah, just forgot an early return 2015-02-21T03:58:28Z nyef: beach: Still SBCL compiler bugs. I just figured out why something that I put together mid-last-year is causing a regression, so I'm hoping to figure out what to do about it tomorrow and get it committed before the freeze period. Or it might wait until next month. 2015-02-21T03:59:04Z PinealGlandOptic quit (Quit: leaving) 2015-02-21T03:59:09Z Bike: okay, it "works", just a moment. 2015-02-21T03:59:57Z JokesOnYou77: Never used BY keyword before 2015-02-21T04:00:08Z beach: nyef: stassats told me how to teach specbot to recognize clim in addition to lp and clhs. I am putting that on the back burner for now, but I'll do something about it later. 2015-02-21T04:00:09Z JokesOnYou77: Also, ON is a bit odd if I remember 2015-02-21T04:00:27Z nyef: Specbot used to know about CLIM. 2015-02-21T04:00:51Z nyef: ... And I may have been the one to add support for lp. It was a while ago, though, so I could be misremembering. 2015-02-21T04:00:52Z beach: Yes. Apparently the format changed, and nobody updated the CLIM database. 2015-02-21T04:01:34Z Bike: JokesOnYou77: http://paste.lisp.org/+34JC 2015-02-21T04:02:02Z Bike: the efficiency is basically garbage, but hopefully it at least does what you want it to 2015-02-21T04:03:36Z beach: nyef: I don't know why the format changed, though. 2015-02-21T04:04:34Z JokesOnYou77: Bike, not quite: (1 (2 (4 (6) (7)) (5)) (3)) should be (1 (2 (4) (5)) (3 (6) 7))) 2015-02-21T04:04:50Z nyef: beach: I have no idea, either. It wasn't just a prolonged outage? 2015-02-21T04:05:18Z beach: nyef: I just know what stassats told me. 2015-02-21T04:07:24Z JokesOnYou77: Bike, I've been thinking about it recursively from the leaves, but I think maybe the recursive case needs to treat each node as a root and then call itself? 2015-02-21T04:07:25Z zacts joined #lisp 2015-02-21T04:09:27Z ruste quit (Read error: Connection reset by peer) 2015-02-21T04:09:41Z ruste joined #lisp 2015-02-21T04:09:49Z Bike: JokesOnYou77: http://sprunge.us/VHBf 2015-02-21T04:09:59Z Bike: if this doesn't work i'm out of attempts. 2015-02-21T04:10:34Z Bike: of course, now it's a queue rather than a stack, but it was a fuck shit stack to begin with, so who's counting. 2015-02-21T04:10:50Z faheem_: drmeister: i'm surprised a random stranger on the train knew what clasp was. what did you say to him? 2015-02-21T04:11:56Z beach: nyef: Do you have a different theory? 2015-02-21T04:12:47Z nyef: Not other than the one that I just suggested, no. 2015-02-21T04:16:03Z gabriel_laddel joined #lisp 2015-02-21T04:17:42Z JokesOnYou77: Beach, This is beautiful. I was trying to do it recursively, but this is amazing. I'm still grokking it. 2015-02-21T04:18:09Z JokesOnYou77: Why is it a queue now? 2015-02-21T04:18:12Z beach: JokesOnYou77: Did you mean "Bike"? 2015-02-21T04:18:15Z Bike: wow, shoved to the wayside 2015-02-21T04:18:29Z JokesOnYou77: Rofl, damn, autocomplete :< Sorry Bike 2015-02-21T04:18:40Z Bike: because things are added to the end but taken from the front. LIFO, baby, just like first year python 2015-02-21T04:19:44Z zacts quit (Quit: ERC Version 5.3 (IRC client for Emacs)) 2015-02-21T04:19:58Z Bike: it's pretty simple. the queue is a list of elements that don't have children yet. each step the loop gets two elements and adds them to whichever was the topmost element that doesn't have children yet, then puts the two elements on the queue for later. side effects keep it all together. 2015-02-21T04:20:19Z Bike: of course you probably want to add error checking and such 2015-02-21T04:23:10Z JokesOnYou77: I think type checking will all be done in function that passes to this one. 2015-02-21T04:23:35Z JokesOnYou77: And, this actually makes me feel better abotu my "starting from the front" approach. 2015-02-21T04:24:07Z JokesOnYou77: This is exactly what I was looking for. Now, once I've understood it, I can implement it. Thank you so much 2015-02-21T04:25:03Z Bike: mmhm 2015-02-21T04:25:34Z jlongster joined #lisp 2015-02-21T04:26:43Z ruste quit (Read error: Connection reset by peer) 2015-02-21T04:27:26Z ruste joined #lisp 2015-02-21T04:28:29Z drmeister: faheem_: I had to get off the train because it had stopped and was about to leave again. 2015-02-21T04:29:08Z beach: drmeister: You should have handed him your business card and said "call me". 2015-02-21T04:30:07Z jlongster quit (Ping timeout: 255 seconds) 2015-02-21T04:34:56Z drmeister: It happened so fast. 2015-02-21T04:35:24Z drmeister: Oh well. 2015-02-21T04:36:23Z drmeister: Binding a special variable generates a call to the function CLEAVIR-GENERATE-AST:CONVERT-GLOBAL-FUNCTION? 2015-02-21T04:37:03Z theseb left #lisp 2015-02-21T04:37:28Z beach: drmeister: Maybe so. A call to that function CALL-WITH-VARIABLE-BOUND. 2015-02-21T04:40:16Z beach: drmeister: How special variables are bound is very implementation-specific, so I provided hooks for customization. 2015-02-21T04:41:10Z Bike: no progv? 2015-02-21T04:42:00Z beach: Bike: Not sure what you are asking. 2015-02-21T04:47:07Z nyef: beach: The implementation of PROGV, particularly the undoing of the bindings, is dependent on how an implementation handles bindings normally. 2015-02-21T04:47:27Z beach: Sure. 2015-02-21T04:47:47Z nyef: This is actually part of why SBCL handles PROGV where it does (in IR2TRAN, IIRC) rather than at the IR1 level. 2015-02-21T04:48:17Z nyef: It's a chunk of IR1 functionality, but for reasons of locality for a cross-cutting concern, it's all in one place. 2015-02-21T04:48:41Z Bike: i'm probably just misunderstanding how cleavir works. 2015-02-21T04:49:29Z beach: Bike: Not necessarily. 2015-02-21T04:50:28Z Kanae joined #lisp 2015-02-21T04:50:32Z nyef: Bike: It's also possible that beach hasn't gotten that far. You can cover a lot of stuff before needing PROGV, after all. 2015-02-21T04:50:59Z beach: Since I can't guess how the implementation is handling special variables, I have a choice. I can either provide some default or just fail if the implementation is not providing the mechanism. 2015-02-21T04:50:59Z cpc26_ joined #lisp 2015-02-21T04:51:19Z Bike: all i was thinking is that progv is supposed to be the implementation's mechanism. 2015-02-21T04:51:57Z beach: Bike: sure, so I could use it as a default? 2015-02-21T04:52:06Z Bike: yeah. 2015-02-21T04:52:21Z beach: But I think PROGV is kind of complicated when the number of bindings is not the same as the number of forms. 2015-02-21T04:53:06Z Bike: "If too few values are supplied, the remaining symbols are bound and then made to have no value." wow, that totally makes sense unambiguously, thank you clhs 2015-02-21T04:53:17Z Bike: i don't know what call-with-variable-bound is supposed to do, so 2015-02-21T04:53:19Z cpc26 quit (Ping timeout: 250 seconds) 2015-02-21T04:53:49Z beach: Bind a variable to the result of a form and call a function while the binding is in place. 2015-02-21T04:54:28Z nyef: Bike: Yeah, CLHS gets to be a bit vague and possibly-contradictory around values. The accepted interpretation is that a new binding is created (so that the old value will be restored on unwind) which is "unbound" as though it had been hit with MAKUNBOUND. 2015-02-21T04:54:31Z Bike: (call-with-variable-bound thunk symbol value) => (progv (list symbol) (list value) (funcall thunk))? 2015-02-21T04:55:01Z beach: Bike: Yes, I agree. I could do it that way. 2015-02-21T04:55:40Z Bike: nyef: hm, my interpretation would be (progv '(*x*) '() (boundp '*x*)) => T, (progv '(*x*) '() (symbol-value '*x*)) => some error. of course, i can see why nobody would actually do that. 2015-02-21T04:56:02Z beach: And I would count on the implementation to provide a compiler macro for when the number of symbols and values is known at compile time, and when the names of the symbols are known. 2015-02-21T04:56:31Z Bike: well, right, that's what i mean when i say i don't know what call-with-variable-bound is supposed to do. like, generate code to call, or what. that sorta thing. 2015-02-21T04:56:48Z nyef: Question: What is the type of the value held by an unbound variable? 2015-02-21T04:56:55Z Bike: nil 2015-02-21T04:57:00Z Bike: if it's just a matter of speed i'd expect a possibly slow default with progv instead of an error, though 2015-02-21T04:57:02Z nyef: Yeah, that's about what I figured. 2015-02-21T04:57:13Z beach: Bike: That's a good idea. 2015-02-21T04:57:32Z nyef: ... Mind the recursion. 2015-02-21T04:58:01Z Bike: doesn't sbcl give error a type of (function whatever nil)? it's what i'd expect. 2015-02-21T04:58:17Z Bike: ayup. 2015-02-21T04:58:30Z nyef: If PROGV uses WHATEVER-IT-WAS uses PROGV, you can kiss your stack goodbye. 2015-02-21T04:58:40Z zacts joined #lisp 2015-02-21T04:59:17Z Bike: You mean if progv uses cleavir's function? 2015-02-21T05:00:19Z camm` quit (Ping timeout: 244 seconds) 2015-02-21T05:01:16Z beach: Cleavir can't just "use the PROGV of the implementation" because PROGV is a special operator so Cleavir must handle it that way. And since handling special variables is implementation specific, there must be some kind of customization mechanism. 2015-02-21T05:02:16Z ASau joined #lisp 2015-02-21T05:02:18Z beach: The question (as always) is: Should Cleavir provide some defaults for "lazy" implementors, or should it require the implementor to think hard about it. In the former case, what should the default be? 2015-02-21T05:03:46Z beach: The default for PROGV could be a function that takes the FORM* wrapped in a thunk. 2015-02-21T05:06:20Z beach: Am I making sense? 2015-02-21T05:07:03Z jlongster joined #lisp 2015-02-21T05:07:06Z nyef: Yes, that's fairly straightforward. 2015-02-21T05:07:07Z Pyridrym quit (Quit: leaving) 2015-02-21T05:07:08Z beach: And I can use that same function for binding special variables. 2015-02-21T05:07:37Z ethycol joined #lisp 2015-02-21T05:07:41Z nyef: That function would have to involve an UNWIND-PROTECT or some other integration to the unwind mechanism, though. 2015-02-21T05:07:47Z beach: Sure. 2015-02-21T05:07:56Z beach: But I would leave that up to the implementation. 2015-02-21T05:08:46Z beach: So for the default case, the HIR/MIR form of the program would have no mechanism for dealing with special variables. 2015-02-21T05:08:48Z nyef: There's some other thought trying to come to mind. Something about unsupplied values in PROGV for such a wrapper, and the provided interface when binding a single, known variable. 2015-02-21T05:09:30Z beach: Yeah, I need to think about that. 2015-02-21T05:09:49Z beach: I already mentioned a compiler macro before. 2015-02-21T05:12:53Z beach: This hypothetical function (let's call it CALL-WITH-BINDINGS) would have to use some mechanism for creating a binding for a variable and then making it have no value. 2015-02-21T05:13:04Z beach: But presumably, the implementation knows how to do that. 2015-02-21T05:13:31Z beach: So it would be (defun call-with-bindings (symbols values thunk) ...). 2015-02-21T05:14:19Z beach: What would the compiler macro would recognize? 2015-02-21T05:14:48Z beach: Symbols being '(symbol) or (list 'symbol). 2015-02-21T05:15:07Z beach: Values being (list