dipper has quit [Remote host closed the connection]
dipper has joined #commonlisp
pranavats has left #commonlisp [Error from remote client]
attila_lendvai has joined #commonlisp
<beach>
char[m]: Do you have an example of what you mean, and of an implementation that allows it?
<beach>
char[m]: I guess technically, it is because the standard has no exceptional situations listed for the special operator FUNCTION, which means that it is undefined behavior if something other than a function name of a lambda expression is used. An implementation can then do anything at all and still be conforming.
<beach>
aeth: You know that it is a function name because the standard defines what a function name is: 2. A symbol or a list (SETF symbol).
<aeth>
"It is an error to use function on a function name that does not denote a function in the lexical environment in which the function form appears. Specifically, it is an error to use function on a symbol that denotes a macro or special form. An implementation may choose not to signal this error for performance reasons, but implementations are forbidden from defining the failure to signal an error as a
<aeth>
useful behavior."
<aeth>
My interpretation of that is that if it's not a function name (currently <symbol> or (setf <symbol>)... and a valid, defined one at that!) or a lambda expression, then it's an error, but it doesn't have to signal it
<aeth>
Because otherwise, that paragraph doesn't really mean anything. It seems a bit... off. As if the LAMBDA stuff was added later
<beach>
Well, we don't know whether char[m] is referring to compile time or run time. That's why I asked.
<aeth>
It is an error to do (function foo) or (function (setf foo)) if you haven't defined them. Or (function (list 1 2 3)) or anything else that's not (lambda ...) or (setf ...) or a symbol. It's just not signaled.
Fare has quit [Ping timeout: 255 seconds]
<aeth>
so it seems clear that it's allowed UB for performance reasons.
<beach>
It depends on what you mean by "to do". Clearly it is an error to execute such a form. But it is not indicated whether it is a compile-time error.
<beach>
But yes, even if it "is an error", it is more like undefined behavior, except that it must not be any useful such behavior.
<beach>
I would still be interested in knowing what the question was referring to.
<beach>
char[m]: Are you still here?
<beach>
The compile-time behavior seems to be a case for WSCL. There is no reason for the compiler to avoid recognizing the situation where NAME is neither a symbol, a list of the form (SETF symbol), nor a lambda expression.
epony has quit [Ping timeout: 252 seconds]
epony has joined #commonlisp
pdietz has joined #commonlisp
epony has quit [Remote host closed the connection]
attila_lendvai has quit [Ping timeout: 255 seconds]
<kakuhen>
they seem to be using matrix (which acts like a glorified IRC bouncer for libera.chat), so your messages likely will be seen by them in a few hours
<beach>
Oh, wow!
rgherdt has joined #commonlisp
<loke[m]>
Since around the start of covid, I've been working on a lot of stuff that I really am not super interested in. I would really, really like to work on something different, specifically Lisp related.
<loke[m]>
I think there are people here who know what my strengths are. Is there anyone looking for people with my profile?
vn36 has quit [Ping timeout: 252 seconds]
<jeosol>
Good morning all!
<beach>
loke[m]: Are you looking for a regular employment, or just stuff to work on in your spare time?
<jeosol>
loke[m]: do you mean as paid project
<beach>
Hello jeosol.
<jeosol>
or hobby stuff
<loke[m]>
Regular employment.
<jeosol>
beach: hi, read my mind with loke[m] comment
<jeosol>
I am doing okay, been a while
<beach>
Welcome back.
<jeosol>
thanks
<loke[m]>
I've been with my current employer for a very long time, and while I'm effective at it, it's not as fun as it should be (a lot, and lot of Java, and not to mention all the deployment architecture stuff (cloud, vm's, containers, etc))
gxt has quit [Remote host closed the connection]
gxt has joined #commonlisp
<jeosol>
loke[m]: is there a programming language you are interested to work in (assuming CL is one) and you have a lot of experience with Java already. how was your team deploying the containers? K8s or in-house/custom?
<loke[m]>
jeosol: Very custom. The application I'm working on is huge (about 60 million lines of code, half in C++ and the other half in Java). It's an old application, and doing kubernetes deployment isn't suitable for it.
<jeosol>
I agree, k8s definitely not suitable for it. It's a monolith? that's large.
<jeosol>
I am sure the large companies can you use C++/Java expertise
<loke[m]>
It's based on a custom service framework, so it's not a single monolith. There are hundreds of individual services.
<loke[m]>
jeosol: I'm sure there is. But I'm not really that interested in doing more of this. I would like to work on Lisp instead, because that's what I enjoy.
<jeosol>
loke[m]: pardon my assumption, it wouldn't make much sense to have that large of a code as a monolith these days. I remember reading there are some companies using CL/lisp, albeit some in stealth mode.
<loke[m]>
jeosol: It's not a monolith. There are a few hundred different services on a standard deployment.
<jeosol>
loke[m]: sorry, if that didn't come out correctly. I am acknowledging that you said it is multi-services /microservices-based
<loke[m]>
It's a mix of different types of services, but especially the older code has a lot of dependencies and relies on the custom service manager to work.
pdietz has quit [Ping timeout: 244 seconds]
<jeosol>
beach: I was doing some natural language processing work on the IRC commonlisp logs. As part of that I had to do some data exploration, and understanding the data and/or get insights from the logs.
pve has joined #commonlisp
<jeosol>
beach: I wish there is an award to give to contributors like yourself. I extracted some statistics of the logs (for a few of the rooms: #commonlisp, #sbcl #sicl)
<jeosol>
loke[m]: that link is for you. It seems you have used different and similar names so those metrics don't include the metric from other name variants
<frodef_>
Good morning! I've githubbed some debris code from a project of mine. https://github.com/frodef/getx I find it useful. Any comments?
<jeosol>
loke[m]: if you don't mind sharing? are you in the US or Europe. I saw a thread about a company in CA (can't remember the name) that hires CL devs, and another in Spain.
<jeosol>
loke[m]: You probably know/heard of these companies.
<loke[m]>
I'm in Singapore. But I've been considering moving back to Europe.
<jeosol>
loke[m]: I see. There was another company that posted on reddit in S. Korea, something called Mind AI, developing a chat bot or something. I discussed with them a while back, but terms required traveling to Seoul. Not sure the status of current status
<loke[m]>
Thanks.
<phileasfogg>
Good morning, racket user here. I'm planning to build an event simulator, and therefore I'd like to choose the language implementation with the highest multiprocessing power. For cpu-bound processes, I want thousands them to send/receive msgs each other, in my laptop. In this case, which one is the best implementation I can use? The scheme community suggested me to use gulie, and now I want some idea from the cl.
<loke[m]>
Korea is not super high on my list, for reasons that has nothing to do with the actual companies there.
<stylewarning>
phileasfogg: CL is good at threads, bad at lightweight {processes, green threads, fibers, etc}
<stylewarning>
[It's not CL intrinsically, just current implementations prefer exposing operating system threads]
<phileasfogg>
which means guile-fiber is a better choice for my purpose?
<stylewarning>
I'm not familiar with it but if I had to guess, yes
m5zs7k has quit [Ping timeout: 244 seconds]
<phileasfogg>
Got it. I really have to choose between "mother of all the processes" approach or just some simulation with tons of arrays and databases in a single proc, ha
<stylewarning>
But you said CPU bound, so I'd think super fast native SIMD code would be better
m5zs7k has joined #commonlisp
<stylewarning>
which Lisp is good at
<loke[m]>
<phileasfogg> "Good morning, racket user here..." <- I'm surprised by the suggestion to use Guile, given how slow it is. At least that was my conclusion back when I tested it, which is arguable quite a few years ago.
<loke[m]>
I wonder if it's improved a lot recently.
<hayley>
Before or after the JIT?
<loke[m]>
I have no idea. Probably before.
<loke[m]>
s/arguable/arguably/
<phileasfogg>
Okay, I might have to do some performance test later
<phileasfogg>
Well, I personally think any of them wil be faster than pyt*on, so let me try them all
<stylewarning>
we can definitely help with the high perf Common Lisp side of things
<stylewarning>
maybe you can get away with a dispatch loop instead of processes
pranavats has joined #commonlisp
<phileasfogg>
I see, that also makes sense. I'll do some research.
azimut has quit [Ping timeout: 258 seconds]
Dynom_ has joined #commonlisp
Dynom_ is now known as Guest5986
elderK has quit [Quit: Connection closed for inactivity]
sveit has quit [Quit: Bye]
sveit has joined #commonlisp
seletz has joined #commonlisp
seletz has quit [Changing host]
seletz has joined #commonlisp
seletz has quit [Quit: leaving]
seletz has joined #commonlisp
jeosol has quit [Ping timeout: 244 seconds]
knusbaum has quit [Ping timeout: 244 seconds]
knusbaum has joined #commonlisp
epony has joined #commonlisp
<Shinmera>
I'd like to hire CL devs but alas I barely have money to pay myself for the next project
<Shinmera>
Maybe that'll change when Kandria releases, but unfortunately I kinda doubt it.
<jackdaniel>
the desire to hire cl devs or the money shortage?
<Shinmera>
the money shortage
<Shinmera>
I have so many projects that could use more work that I don't think I'd ever run out of a desire to hire people to work on them :)
dnaeon has joined #commonlisp
Cymew has joined #commonlisp
pranavats has left #commonlisp [Error from remote client]
vn36 has joined #commonlisp
Cymew has quit [Quit: Konversation terminated!]
Cymew has joined #commonlisp
cosimone has quit [Remote host closed the connection]
cosimone has joined #commonlisp
ttree has quit [Ping timeout: 240 seconds]
makomo_ has quit [Quit: WeeChat 3.6]
Noisytoot has quit [Ping timeout: 260 seconds]
ec has quit [Ping timeout: 258 seconds]
vn36 has quit [Ping timeout: 272 seconds]
ec has joined #commonlisp
scymtym has quit [Ping timeout: 250 seconds]
Brucio-61 has quit [Ping timeout: 240 seconds]
Guest5986 has quit [Quit: WeeChat 3.7.1]
Noisytoot has joined #commonlisp
bitmapper has quit [Quit: Connection closed for inactivity]
akoana has joined #commonlisp
<frodef_>
jeosol: thanks. I find it particularly useful for wading through json and xml data from various sources.
scymtym has joined #commonlisp
Brucio-61 has joined #commonlisp
silicius has quit [Ping timeout: 244 seconds]
Posterdati has quit [Read error: Connection reset by peer]
morganw has joined #commonlisp
<loke[m]>
Because I was bored, I was reading the lisp 1.5 manual. I note that lisp 1.5 did not have an interactive mode, and instead you had to feed card jobs to it.
<loke[m]>
What version of lisp had the first REPL?
cosimone has quit [Remote host closed the connection]
cosimone has joined #commonlisp
<dipper>
hi
<beach>
Hello dipper.
<loke[m]>
jcowan: The PDP-1 had its accumulators in core and no actual registers? I note that they refer to all the memory as "registers"?
<jcowan>
More accurately, its registers were addressable as the lowest elements of (core) memory, though typically they were implemented using high-speed (probably DTL or TTL) logic.
<jcowan>
This feature also held for the successors, the PDP-6 (36-bit) and the PDP-10.
<dipper>
hello beach, I rearly have poor english
_cymew_ has joined #commonlisp
<beach>
dipper: It is occasionally hard to understand what you are saying.
<beach>
dipper: What is your native language?
epony has quit [Ping timeout: 252 seconds]
<jcowan>
A common hack was to copy the inner loop of performance-sensitive code into the registers.
epony has joined #commonlisp
vn36 has joined #commonlisp
<loke[m]>
<jcowan> "More accurately, its registers..." <- Oh I see. I know this was the fact for the AGC as well.
<jcowan>
What is the AGC?
easye has quit [Remote host closed the connection]
perrierjouet has quit [Ping timeout: 252 seconds]
_cymew_ has quit [Ping timeout: 272 seconds]
random-nick has joined #commonlisp
_cymew_ has joined #commonlisp
makomo has joined #commonlisp
<pjb>
beach: clisp allows a second argument in CL:FUNCTION, a lambda expression for the function. This is this kind of extensions that makes difficult to write conforming / universal code walkers. Allowing the user to specify new forms of function names could be specified, something like setf (defsetf) functions.
<pjb>
I guess for code walkers, it means that they should accept any form as argument to CL:FUNCTION.
makomo has quit [Ping timeout: 240 seconds]
pranavats has joined #commonlisp
X-Scale has quit [Ping timeout: 250 seconds]
X-Scale has joined #commonlisp
<beach>
I see.
<beach>
But I wonder whether that's what char[m] was referring to.
_cymew_ has quit [Ping timeout: 240 seconds]
vn36 has quit [Ping timeout: 252 seconds]
<phoe>
pjb: in CLISP, this effectively works like a named lambda, right?
<phoe>
other than the fact that it's 100% unportable
<frodef_>
So, Hunchentoot encodes the remote IP in its sessions. With no east override. How inconvenient.
<frodef_>
s/east/easy
makomo has joined #commonlisp
doulos05 has quit [Ping timeout: 272 seconds]
doulos05 has joined #commonlisp
sedzcat has joined #commonlisp
sedzcat has quit [Client Quit]
tyson2 has joined #commonlisp
thuna` has quit [Remote host closed the connection]
random-nick has quit [Ping timeout: 240 seconds]
<frodef_>
Does anyone know why, for DEFCLASS one would choose to use :DEFAULT-INITARGS rather than per-slot :INITFORM ? I'm looking at HUNCHENTOOT:ACCESSOR.
frodef_ is now known as frodef
<pjb>
phoe: yes.
<jackdaniel>
frodef: sometimes a slot value is a function of the initarg (i.e computed in initialize-instance)
<frodef>
jackdaniel: right, thanks.
Josh_2 has joined #commonlisp
<Josh_2>
Good Morning
<Josh_2>
What is the most well documented CL game engine? For nooobs :(
<frodef>
jackdaniel: It makes inheritance/specialization difficult, though.
jmdaemon has quit [Ping timeout: 240 seconds]
<jackdaniel>
how so?
<jackdaniel>
can't you supply default-initargs overriding old defaults yourself?
<jackdaniel>
(then you don't even have to repeat the slot definition in your subclass)
<frodef>
jackdaniel: yes, but then I have to duplicate the whole default-initargs except the one tweaked value.
<frodef>
..and so my "specialization" will have to deal with all the slots, not just the one I'm interested in. And should there be more mixin classes later on, it'll be a complete mess.
<jackdaniel>
frodef: I think that I'm lost, you may overwrite only one initarg
<Josh_2>
What is purpose of default initargs? can't you just use initform?
<frodef>
jackdaniel: problem is, my one initarg will be overridden by the original class's default-initargs, I believe.
<yitzi>
Josh_2: So you can override specific initforms in subclasses.
<jackdaniel>
then how in my example the initarg :b from BAR overwrites :b from the superclass FOO?
<frodef>
Josh_2: see answer to my question 20 lines up..
<adeht>
I always use :default-initargs for slots that have an initarg, and only use :initform for slots that don't (those are usually "internal").. a subclass then doesn't need to assume that the superclass has that slot
adeht is now known as _death
<jackdaniel>
frodef: it is that subclass default initargs take precedence over the superclass default initargs
cage has joined #commonlisp
<frodef>
hm.. I thought the entire initargs would be replaced by the subclass, but your example seems to suggest they are merged/appended.
<jackdaniel>
they are
<Josh_2>
yitzi: but you can override specific initforms by providing new initforms in your subclass
<jackdaniel>
Josh_2: read my answer from when frodef asked the very same question
<Josh_2>
Okay I will stohp
<jackdaniel>
like (now) 30 lines above
<Josh_2>
Yeh can't see it cos I just joined the room
<Josh_2>
no bouncer
<jackdaniel>
there is a log mentioned in the topic
epony has quit [Ping timeout: 252 seconds]
<frodef>
Josh_2: <jackdaniel> frodef: sometimes a slot value is a function of the initarg (i.e computed in initialize-instance)
epony has joined #commonlisp
<frodef>
It's specified in CLHS 7.1.4 Rules for Initialization Arguments. Thanks so much jackdaniel!
<jackdaniel>
sure
ec has quit [Ping timeout: 258 seconds]
<dipper>
hi beach I speak chinese native
<beach>
I see.
<dipper>
I want to improve my english too
<beach>
Sure.
<dipper>
thanks but it's not a easy work
thuna` has joined #commonlisp
<frodef>
dipper: when you say "chinese", is that mandarin?
<beach>
dipper: Start by turning on your spell checker. It will catch the most obvious errors. Like "rearly".
alejandrozf has joined #commonlisp
<dipper>
beach: yes I try
_cymew_ has joined #commonlisp
<dipper>
I use Konversation as client , not find spell check yet
<dipper>
frodef: you are right
jeffrey has quit [Quit: Client quit]
jeffrey has joined #commonlisp
<beach>
If indeed Konversation does not have a spell checker, that is very surprising to me.
<Shinmera>
but there are likely other issues due to bitrot.
vn36 has quit [Quit: leaving]
<Shinmera>
the dist includes all required systems, at least
<Josh_2>
Seems so
<Josh_2>
"TT required"
<Josh_2>
in main.lisp :(
<Josh_2>
ah well
<Shinmera>
The required changes should not be huge
<Shinmera>
But I unfortunately also don't have the time to maintin a jam game
<Josh_2>
I understand
<jackdaniel>
Josh_2: take a hint and make a pull request
<jackdaniel>
that fixes the issue
<Shinmera>
Hah. Well, I'm not expecting that to happen, but if someone does do it I'd be happy to merge it in :)
<Josh_2>
Did you rename alloy:suggest-bounds to something else?
<Shinmera>
ah, yes.
<Shinmera>
it's suggest-size
<Josh_2>
Okay thanks :)
<Josh_2>
Okay I got it to build
<Shinmera>
nice! :)
<Josh_2>
I had to remove a (load-time-value (make-instance ..)) and change that method name
rgherdt has joined #commonlisp
<Shinmera>
does it actually run, too?
<Josh_2>
Nope
<Josh_2>
COMMON-LISP:SETF TRIAL::PREPARE-PASS-PROGRAM-FUN) (0)> when called with arguments (NIL #<RENDER-PASS {100B416603}>).
<Josh_2>
Shinmera: when you started with CL Game dev I assume you already had experience with game dev?
<Shinmera>
Ah, dang. That smells like a problem caused by the recent render subsystem changes.
<Shinmera>
Sorta? I'd been making games since I was like 6.
<Shinmera>
I never made anything good, mind.
<Shinmera>
Or anything close to as big as Kandria.
<jackdaniel>
I'm waiting for kandria to be posted on lisp game jam, then I'll download it
* jackdaniel
inserts slightly evil laugh
<Josh_2>
I see
Oddity has quit [Ping timeout: 244 seconds]
<Shinmera>
jackdaniel: hah, I think that would be against the rules
<jackdaniel>
I don't mind if you get disqualified
<Josh_2>
Ah the trial-workbench doesn't work either
<Josh_2>
same problem
Brucio-61 has quit [Remote host closed the connection]
Brucio-61 has joined #commonlisp
<Shinmera>
Wot. The workbench absolutely works.
<Josh_2>
Hmm
<Josh_2>
Okay I will restart my image
<Shinmera>
Did you mix sources?
<Helmholtz>
Is there a way to enforce a paradigm on CL source? For example, can I write my application in a purely functional way like clojure or scheme?
<Josh_2>
My mistake Shinmera
scymtym has quit [Remote host closed the connection]
scymtym has joined #commonlisp
<jackdaniel>
enforce? no; use? yes
<Josh_2>
Dont accept pull requests that aren't written in a functional way?
<Shinmera>
you can enforce it by social pressure :)
<Shinmera>
though why you would want to, would be my next question
<kakuhen>
antikythera: clojure code can be forced to be purely functional? news to me. IME it always ends up being as "imperative" as any other lisp but with extra ceremony for when you want mutable references.
<kakuhen>
i cant even think of any good way to even ensure someone's writing purely functional clj since you can just require namespaces that redef core functions behind your back
<kakuhen>
but this is p off topic for this channel
<Josh_2>
Well
<Josh_2>
i'm lost :(
<Josh_2>
What I gotta find is a total beginners introduction
<Josh_2>
dont think I'm gonna find that in CL
<kakuhen>
also even basic things like mapv and into in clj make use of transients under the hood (which are mutable and have side effect producing assoc, conj, ...) so its VERY easy to lose this game of "you must write pure functional code"
<Josh_2>
Babies first vidya game
<kakuhen>
with that said, you can always just attempt to follow the so-called "functional core, imperative shell" idea many people seem to like applying -- this can be done in CL in the same way it can be done in clojure
rogersm has quit [Quit: Leaving...]
<Josh_2>
Maybe making a really simple game engine would be better for me
<char[m]>
beach: aeth: I wasn't responding because I was asleep. My bad for asking such a vague question. I am mainly referring to sbcl's named-lamda (some other implementations do something similar). It seems to act like lambda where is a macro that expands to (function (named-lambda ...))
<pjb>
char[m]: this is better than what clisp does. (easier to deal with).
<beach>
Hmm, that doesn't look like conforming behavior to me.
<pjb>
char[m]: implementations are allowed to make extensions to CL. Only in a few parts are they restricted in the way they can extend the language. Implementations can also implement only a subset of CL. In general, they implement a superset of a subset of CL.
<pjb>
beach: it's conforming, as long as it's _documented_.
<morganw>
Josh_2: I've only dabbled a little, but the SDL2 bindings were working and it seemed straight forward to build something simple from the ground up.
<beach>
pjb: What evidence do you have for that?
<pjb>
Programs using extensions, of course may not be conforming.
<pjb>
beach: it's the general rule for supersets and subsets of the CL language.
<beach>
I don't believe that, but I am also not interested enough to check.
<pjb>
(which is also why I don't agree with the early criticism of CL that it would freeze language research and evolution).
thuna` has quit [Remote host closed the connection]
<pjb>
This is why the question of TYPE-ERROR is so important: conforming programs may depend on having a type-error signaled by a function, which prevents extending the function to other types.
<Bike>
i don't know if increasing the space of valid function names is explicitly allowed or disallowed anywwhere.
<Bike>
in clasp we opted to indicate function names through a declaration instead, which is nicer (in my opinion) because other program processors can just ignore it, instead of having to know how extensions to a special operator work.
<Shinmera>
Josh_2: the trial workbench is a much better starting place imo.
<char[m]>
wow @pjb clisp just insults the the "function" special-operator.
<Shinmera>
Josh_2: feel free to ask questions over in #shirakumo, too.
<pjb>
char[m]: in a way. But it's allowed.
<char[m]>
really? spec very clearly says function take only one argument.
<Shinmera>
clhs 1.6 allows such changes.
<Helmholtz>
Shinmera: kakuhen To checkout this "functional programming reduces bugs" meme
<Josh_2>
Shinmera: I appreciate your help, however you would basically just be teaching me graphics programming
<Josh_2>
Using Trial
<Helmholtz>
(checking whether it's really a meme or not)
<Shinmera>
Josh_2: not necessarily.
epony has quit [Ping timeout: 252 seconds]
epony has joined #commonlisp
Dynom_ has joined #commonlisp
<Josh_2>
If I work through the OpenGL examples then I will have a much better understanding of graphics programming than when I started
<_death>
hmm, looks like a typo in clhs not listed in cliki...
Dynom_ is now known as Guest7629
euouae has joined #commonlisp
<euouae>
Hey all, I'm trying to use slime-asdf in slime, but it won't load
<euouae>
I tried installing slime from emacs melpa and then I also tried with quicklisp helpre
<char[m]>
I still don't see how 1.6 says implementations can add parameters. Does that fall under "implementation-defined behavior" I would think that only refers to the definition of the special-operator (what it does with the spec defined arguments).
<jackdaniel>
if the implementation accepts all valid forms for the special operator function /and then some more/ then there is no problem -a conforming program will work
<Josh_2>
Okay I think you are right Shinmera
<Josh_2>
The opengl examples are in CPP :sob:
<euouae>
I'm going to ask in #slime
<char[m]>
jackdaniel: So basically as long as the added parameters are optional.
<jackdaniel>
right, but it encourages writing programs that are not a conforming common lisp
<jackdaniel>
so I'd say that it is a bad butchery trick
azimut has joined #commonlisp
<Josh_2>
Okay but there is the opengl redbook
<Josh_2>
:sunglasses:
<Shinmera>
That's not gonna tell you much of use for modern graphics programming.
<_death>
interesting that sbcl gives a deprecation warning for #S(foo a 42) but not, say, use of remove-if-not ;)
euouae has quit [Remote host closed the connection]
Brucio-61 has quit [Remote host closed the connection]
<kakuhen>
if there will never be another CL standard then i think it's safe to say nothing in CL is deprecated ;)
<_death>
section 1.8 will be deprecated
Brucio-61 has joined #commonlisp
fourier has quit [Quit: Lost terminal]
scymtym has quit [Remote host closed the connection]
scymtym has joined #commonlisp
akoana has quit [Remote host closed the connection]
akoana has joined #commonlisp
dipper has quit [Remote host closed the connection]