jackdaniel changed the topic of #commonlisp to: Common Lisp, the #1=(programmable . #1#) programming language | Wiki: <https://www.cliki.net> | IRC Logs: <https://irclog.tymoon.eu/libera/%23commonlisp> | Cookbook: <https://lispcookbook.github.io/cl-cookbook> | Pastebin: <https://plaster.tymoon.eu/>
akoana has quit [Quit: leaving]
skyl4rk has quit [Ping timeout: 260 seconds]
green_ has quit [Remote host closed the connection]
green_ has joined #commonlisp
mooncat has joined #commonlisp
notzmv has quit [Ping timeout: 268 seconds]
unl0ckd has quit [Ping timeout: 268 seconds]
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
varjag has quit [Ping timeout: 264 seconds]
rogersm has joined #commonlisp
rogersm has quit [Ping timeout: 256 seconds]
Jach has quit [Ping timeout: 260 seconds]
meritamen has joined #commonlisp
unl0ckd has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
Jach has joined #commonlisp
attila_lendvai has quit [Ping timeout: 246 seconds]
dra has quit [Remote host closed the connection]
Lord_of_Life has quit [Ping timeout: 245 seconds]
Lord_of_Life has joined #commonlisp
tyson2 has joined #commonlisp
Jach has quit [Ping timeout: 268 seconds]
yitzi has quit [Remote host closed the connection]
Jach has joined #commonlisp
green_ has quit [Ping timeout: 268 seconds]
josrr has quit [Remote host closed the connection]
larix1 has quit [Ping timeout: 245 seconds]
larix has quit [Ping timeout: 245 seconds]
epony has joined #commonlisp
meritamen has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
meritamen has joined #commonlisp
notzmv has joined #commonlisp
random-nick has quit [Ping timeout: 252 seconds]
<jcowan> CLtL1 is 40 years old this year; ANSI CL is 30 years old.
jonatack has quit [Read error: Connection reset by peer]
jonatack has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
green_ has joined #commonlisp
NicknameJohn has quit [Ping timeout: 260 seconds]
shka has quit [Ping timeout: 252 seconds]
shka has joined #commonlisp
bubblegum has quit [Remote host closed the connection]
bubblegum has joined #commonlisp
azimut has quit [Ping timeout: 240 seconds]
Jach has quit [Ping timeout: 252 seconds]
Jach has joined #commonlisp
bubblegum has quit [Remote host closed the connection]
Pixel_Outlaw has quit [Remote host closed the connection]
bubblegum has joined #commonlisp
amb007 has joined #commonlisp
amb007 has quit [Ping timeout: 246 seconds]
decweb has quit [Ping timeout: 240 seconds]
<hexology> i noticed that in clozure, parse-namestring expands the user's home directory if the namestring starts with "~". is there a way to tell it not to do that?
elderK has joined #commonlisp
<hexology> the behavior is documented here https://ccl.clozure.com/docs/ccl.html#pathname-expansion -- it'd be great if there was some way to diasble it
<ixelp> Clozure CL Documentation
<gilberth> How namestrings are turned into pathnames is highly implementation dependent anyway.
triffid has quit [Quit: triffid]
<hexology> fair. it looks like uiop/pathname:ensure-pathname consistently does not expand the tilde
<gilberth> Besides almost all Lisps do tilde expansion. <https://termbin.com/dg9q>
<hexology> ah, ty. looks like sbcl does expand it, but in a different way
<hexology> well, it doesn't "expand" it. but it's not just treating it as "~" either.
meritamen has quit [Remote host closed the connection]
<gilberth> What is annoying though is that CCL:NATIVE-TO-PATHNAME does not escape the tilde. Even when I make it do so, the printer misses it. Perhaps I'll patch that.
<gilberth> However, when I say (pathname-directory (uiop/pathname:ensure-pathname "~/foo")) I get (:RELATIVE "~"), what's wrong with that?
shka has quit [Ping timeout: 252 seconds]
<hexology> gilberth: that's what i'm using now
<hexology> and to be clear, expanding the tilde is very convenient in a lot of cases. i just happened to not want it in this case
<gilberth> Sure. What is really missing is a standard function to take a native path and turn it into a Lisp namestring or pathname. I believe UIOP tries to address that. Also the other way around: Given some pathname get a path that you can pass along to system calls or other external programs.
<gilberth> Pathnames always were a pain to work with. For the most part because all implementation have funny corner cases in which they act funny in different ways.
unl0ckd has quit [Ping timeout: 268 seconds]
NicknameJohn has joined #commonlisp
waleee has quit [Ping timeout: 240 seconds]
<hexology> gilberth: i was wondering about that too, getting a string from a pathname
<hexology> also, splitting a filesystem path into "parts" is a bit annoying
<gilberth> For pathname -> native Lisp implementations need to have a routine somewhere. And I find UIOP:NATIVE-NAMESTRING for that.
<gilberth> I find the documentation string a bit vague though. It says "for use by the operating system". What is meant? For use by system calls, or for use by the shell?
<gilberth> Shell would expand ~. With DOS^WWindows '/' is a directory separator to syscalls, but not with shell commands.
<hexology> i interpret that to mean suitable for exec() and friends
<hexology> that doesn't seem to be what it does, but that's what i'd expect based on that doc
<gilberth> It could have been more explicit about this.
<gilberth> Anyhow, when I poke around, I find that CCL isn't as round-trip safe as I wished for. I'll put that on a TODO.
<beach> gilberth: Are you maintaining CCL?
<gilberth> beach: Not officially, but I fix bugs as I come across them.
<beach> I see.
<gilberth> Besides I interface a lot with foreign land and so this particular corner is better bug-free.
<beach> Is rme still around though? I don't see him here much.
<beach> Oh, what work are you doing that require foreign code?
<gilberth> beach: CLIM, what else? I'm not with the NIH faction.
<beach> Heh. I was unaware that CLIM requires much foreign code.
<gilberth> Things have changed and even with X11 the API isn't the X protocol anymore, but some libraries.
<beach> Yes, I understand.
<beach> That's unfortunate.
<gilberth> beach: Try drawing a fat line with anti-aliasing using RENDER with proper cap shape, joint shape, dashing and no overdraw. Tell me when you're finished. ;)
<beach> I'll pass, but thanks for the offer.
<gilberth> Well, kids believe in blittering and putting as much as possible into the client. It began with font rendering. I hear that with Wayland, you are also supposed to come up with window decoration.
<beach> I have heard about the trend, yes.
<gilberth> They should have put Cairo into the protocol.
<gilberth> Instead you have that as a library and what is send to the display server is a list of triangles. All the RENDER can do besides blittering.
<beach> And would it bee too hard to write the equivalent of Cairo in Common Lisp?
<beach> You would still have client-side rendering, but no (or less) dependency on foreign code.
<gilberth> You would need a blazing fast and correct implementation of polygon clipping.
<beach> I see.
<gilberth> But I don't see the point, when that is already implemented and others maintain Cairo. Wasted time, if you ask me.
nalbyuites has joined #commonlisp
<gilberth> Same goes for font rendering and proper Unicode rendering.
<beach> Maybe it is an obsession of mine, but I constantly think in terms of a LispOS (CLOSOS) that doesn't have a C compiler.
<gilberth> With fonts e.g. a user would expect that when they install "Acme Fantasic Medium" with their system, that a CLIM application can use that.
<beach> On the other hand, maybe it is easier to write a C compiler that generates safe code.
<gilberth> beach: I would go headless anyway. And then come up with a proper display server protocol.
<beach> Right, obviously with a Lisp OS, I can't care much about what users expect.
<beach> What do you mean by "headless" in this context?
<gilberth> beach: One could use noffi as a starting point for a C compiler. But unless you represent C pointer as a pair of an object and an offset you won't gain much and could as well pick up assembly. WASM e.g.
<gilberth> beach: A machine without a display attached. Thus w/o a "head".
<beach> I am lost again, but that's not terribly surprising.
<gilberth> Given a proper display protocol you can then use any other machine as a terminal. Like in the olde days.
<beach> Yes, I see.
<gilberth> The benefit is that I can browse the www and use that LispOS from the same seat e.g. A display protocol would also put all the burden of possibly hw accelerated rendering, all the font issues, etc. to others.
<beach> Indeed. That has been your preferred solution all along as I recall.
<beach> You have used phrases such as "putting font rendering in the server, where it belongs".
<gilberth> Yes. See, you don't send bitmaps with HTML. Or with PDF files.
<beach> So then, there you have your solution. Design a protocol, put the foreign code in a separate process, and use pure Lisp for CLIM.
<gilberth> beach: I'll get there eventually. I have a prototype backend using a HTML Canvas over a Websocket for graphics. I wrote that as a test for how well it would work.
<beach> Why am I not surprised. :)
<gilberth> But: I also want to have display lists (aka output histories) on the display server. And I'm not there yet.
<beach> Oh, interesting idea.
<gilberth> That would give you local scrolling e.g.
<beach> Yeah.
<beach> Definitely worth thinking about a protocol.
<gilberth> Then even a connection across the atlantic should be feasible for a mostly text-based CLIM application.
<beach> Yes, I understand.
<beach> So are you working on anything in Common Lisp besides CLIM?
<gilberth> But it makes sense in a LAN too. Scrolling could happen at full frame rate. Might as well be 144fps or whatever is available today.
nalbyuites007 has joined #commonlisp
<beach> Sure.
<gilberth> beach: That noffi. Besides CLEX needs a manual, now that I consider it finished.
* beach Googles those things.
<gilberth> You won't find much.
<beach> :( So maybe a one-phrase description?
nalbyuites has quit [Ping timeout: 245 seconds]
<gilberth> noffi is here: <https://lispcafe.org/fossil/noffi/index> It is an FFI that works more like a C compiler than a binding generator. I parse header files and you kind of mix C and Lisp. This has two benefits: (a) it works with C macros (and with static inline eventually) and (b) two hackers addressing the same foreign library can share code as there are no bindings written. Look at the examples, e.g.
<ixelp> noffi: noffi
<ixelp> noffi: xlib-demo.lisp at tip
<gilberth> That's all neede to address libX11. Notice that BlackPixel is a C macro.
<gilberth> You can actually write things like #_(10/3) and get 3.
<gilberth> CLEX is a scanner generator using that novel RE matching algorithmn of mine. It lives here <https://lispcafe.org/fossil/clex/file?name=src/clex.lisp&ci=tip>
<ixelp> clex: clex.lisp at tip
* beach reads...
<gilberth> noffi's C scanner using CLEX is here <https://lispcafe.org/fossil/noffi/file?ci=tip&name=src/lexer.lisp&ln=176>
<ixelp> noffi: lexer.lisp at tip
<gilberth> Anyhow CLEX can also be used as a general purpose RE matcher and fully conforms to POSIX unlike any other library you find. Or: I yet have to find a library passing all POSIX RE tests that I have.
<beach> Very ambitious work.
<gilberth> Code is compiled to DFAs. And that is the noval thing, as for submatch addressing nobody else has figured out yet how to do w/o an NFA.
<beach> You mean without some huge blowup in size?
<gilberth> beach: I am talking about deterministic versus non-determistic. I match an input of size n in O(n). An NFA cannot do that. It would be in O(exp) instead.
<gilberth> And about submatch addressing.
<gilberth> With that you cannot simply compute the superset automaton of your NFA and call it a DFA.
<beach> I see.
<gilberth> Anyhow, it's all with that draft I sent you once. And hayley did an implementation of my algorithm too.
<beach> Great work, it seems! Congratulations!
bubblegum has quit [Ping timeout: 260 seconds]
<gilberth> I would need a manual.
<beach> I am not going to write it for you. I am busy with other stuff.
<beach> But I could proofread it if you write it.
<beach> gilberth: To get back to Common Lisp, are you aware of the WSCL project that I started?
<gilberth> I just can't write. That's my weak spot.
<beach> Hmm, I see.
<gilberth> beach: Yes, but I'm not following it.
<beach> OK. Just checking.
bubblegum has joined #commonlisp
<gilberth> Writing is like hacking. When I start at one place, too many other things come to mind and I have a hard time staying on-topic.
<beach> But that's fine. I am like that too, but it is always possible to organize after the fact.
<beach> Proofreaders can help you fix it up, as long as the relevant information is there.
<gilberth> I mean, I believe I can get sentences out straight. It's rather that I either write too little, too much, or too confused. Besides, I don't enjoy writing.
nalbyuites007 has quit [Ping timeout: 264 seconds]
<beach> Yes, I see.
<beach> Occasionally, we (or at least some of us) must do things we don't enjoy.
<gilberth> Anyhow, this CLEX is useful. And it's pretty fast. I'm tired of handwriting parsers. CLEX can do the lexing. And I have a brushed up version of that old lalr.cl that you find with AI repo. For parsing C I made it a backtracking LALR(1) parser, and that works very well, given that C is context senstive.
<beach> On the other hand, you probably deserve working with stuff you enjoy.
<gilberth> noffi is an attempt to solve FFI once and for all. It's a great productivity boost when you can just say #_{#include <libacme.h>} and that's all you need to play with libacme. Relevant for those that must or want to address foreign code.
<beach> I can see that.
<beach> And I think I can see how all those projects fit together.
<gilberth> beach: And, yes, I'm "out". I don't work and rather hack what I feel like hacking. Also I don't feel like founding for the foreseeable future. But never say "never".
<beach> For CLIM, you need FFI. For FFI you want something better, so NOFFI. For NOFFI you probably need a C compiler. For a C compiler you need a fast lexer and a fast parser.
<gilberth> beach: Yes like that. But it began with "For a web browser, I need a toolkit, so ..."
<beach> I see.
<gilberth> But that first will never happen.
<beach> Would that be Closure?
<gilberth> Closure prompted me to implement CLIM in the first place, yes.
<beach> Right.
<gilberth> I mean, I began greenspuning half of CLIM, so I went for the real thing instead.
<gilberth> Stuck there.
<beach> Do you remember when you merged the two CLIM projects? I was interested in CLIM because I needed a GUI toolkit for Gsharp.
<beach> Maybe 2000 or 2001 or something like that?
<gilberth> I do. What I remember too was the looks of your bystanding students, when you sat me in front of a French keyboard and said "Don't worry, it's an US ASCII keymap" and I said "Great!" and started typing.
<beach> Heh.
<beach> I still work like that myself. It is often impossible to get a different keyboard here.
<gilberth> Same here.
<gilberth> I switched to US-ASCII the moment I got a copy of Turbo C. Impossible to type { } on a German keyboard.
<beach> I understand. When I started using 3 languages on a daily basis, I had to figure something out, so it is US + input methods.
<beach> 4 with my Vietnamese I guess. That's even worse.
<gilberth> It's rare that I actually type German.
<beach> Oh wow!
<beach> I just finished two emails to my brother in Swedish. Don't you communicate with friends and family?
<gilberth> There is not much family to communicate with. With my cousin I share the root, leaves the other three and we either see or call each other. And then there is my wife. Same.
<beach> Makes sense.
<gilberth> I'm not employed, so I rarely need to write business related mail.
<beach> Sure.
<beach> Do you still have the company, or *a* company?
<gilberth> I can't do without owning a company. But that company that I founded I don't own anymore. But I own that other company that does electrical installation work and some such.
<beach> Hmm, OK.
<gilberth> Recently we installed a ton of solar panels.
<beach> Nice!
<gilberth> It would have been nicer, when we would find anyone to employ.
<gilberth> Or hire.
<beach> Lots of companies have that problem it seems.
<gilberth> All of them. Boomers leave the job market. And then there is that academic inflation as well.
<beach> Yep, and young people who don't buy the importance of working, which I fully understand.
<gilberth> The trouble is that once people retire, they don't stop consuming. So the proportion of people working to people not working gets lower and lower. And this is only the beginning.
<beach> I know. :(
<gilberth> beach: Well, there are twice as much of your generation than of my generation.
<beach> Hmm.
<gilberth> * as of my ;I guess
<beach> Anyway, we should probably get back to Common Lisp, or else we will be kicked.
<gilberth> This is why I usually hide elsewhere.
<beach> To avoid being kicked? :)
<beach> I think your input to Common Lisp is valuable.
<gilberth> I can't be kicked off #lispcafe. Someone made me op even :-)
<beach> You have some interesting observations about the standard.
<beach> I don't think any of us two would be kicked from here actually.
<gilberth> Anyhow, I'm the infrastructure person. And CLEX, noffi, as well as another CLIM, once I get it out the door, are building blocks.
<beach> You resemble scymtym in that respect.
<beach> He prefers to work on components of the infrastructure.
<gilberth> beach: I have been asked more than once to keep on-topic here. I notoriously cannot keep on-topic, so I lurk.
<beach> Sorry, entirely my fault.
<cmack> gilberth: have you worked wayland support into your CLIM?
<gilberth> Oh, and Nova-Spec is infrastructure as well.
<beach> Yes, very nice work.
<beach> I think I once called you the "great recycler".
<gilberth> cmack: I don't care for that blitterer. But given how my CLIM is structured, I am pretty confident that a port should be fairly easy. I mean, Cairo works for it, and GTK as well.
<beach> gilberth: Are you in charge of ixelp? Perhaps it could be an alternative to specbot or Colleen for looking things up, and then it could use the Nova Spec instead.
<beach> Oh, minion and specbot are back? I missed that.
<gilberth> cmack: Thing is: I don't use Wayland at all myself. I'm on a mac. And thus have a Cocoa backend and an X11 backend. I use Linux as well, but that Linux is headless and talks to XQuartz.
<beach> minion: Are you a bot?
<minion> i'm not a bot. i prefer the term ``electronically composed''.
<gilberth> beach: I am.
<cmack> gilberth: I see and agree -- macOS support is a hinderance with wayland
elderK has quit [Quit: Connection closed for inactivity]
<gilberth> cmack: But I test with XWayland once in a while. I have a handful of Linux distros in VMs for testing.
meritamen has joined #commonlisp
Inline has quit [Ping timeout: 256 seconds]
meritamen has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
jonatack has quit [Read error: Connection reset by peer]
jonatack has joined #commonlisp
jon_atack has joined #commonlisp
jonatack has quit [Read error: Connection reset by peer]
ym has joined #commonlisp
dcb has quit [Quit: Connection closed for inactivity]
daox has joined #commonlisp
daox has quit [Client Quit]
nalbyuites has joined #commonlisp
Gleefre has quit [Remote host closed the connection]
tibfulv has quit [Remote host closed the connection]
tibfulv has joined #commonlisp
tibfulv has quit [Remote host closed the connection]
tibfulv has joined #commonlisp
tibfulv has quit [Remote host closed the connection]
tibfulv has joined #commonlisp
jrx has joined #commonlisp
bilegeek has joined #commonlisp
jrx has quit [Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.1.50)]
rogersm has joined #commonlisp
donleo has joined #commonlisp
traidare has joined #commonlisp
rogersm has quit [Remote host closed the connection]
rtypo has quit [Ping timeout: 252 seconds]
meritamen has joined #commonlisp
dajole has quit [Quit: Connection closed for inactivity]
luna-is-here has quit []
amb007 has joined #commonlisp
luna-is-here has joined #commonlisp
dino_tutter has joined #commonlisp
Jach has quit [Ping timeout: 245 seconds]
khrbtxyz has quit [Remote host closed the connection]
Jach has joined #commonlisp
khrbtxyz has joined #commonlisp
rogersm has joined #commonlisp
khrbtxyz has joined #commonlisp
khrbtxyz has quit [Changing host]
bubblegum has quit [Remote host closed the connection]
mrvdb- has joined #commonlisp
mrvdb has quit [Ping timeout: 268 seconds]
meritamen has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
makomo has quit [Ping timeout: 256 seconds]
gjvc has quit [Remote host closed the connection]
meritamen has joined #commonlisp
Kyuvi has quit [Ping timeout: 250 seconds]
khrbtxyz has quit [Ping timeout: 246 seconds]
pve has joined #commonlisp
prokhor_ has quit [Ping timeout: 245 seconds]
prokhor has joined #commonlisp
shka has joined #commonlisp
Inline has joined #commonlisp
dcb has joined #commonlisp
_cymew_ has joined #commonlisp
jon_atack has quit [Read error: Connection reset by peer]
jonatack has joined #commonlisp
jon_atack has joined #commonlisp
jonatack has quit [Read error: Connection reset by peer]
jon_atack has quit [Read error: Connection reset by peer]
jonatack has joined #commonlisp
khrbtxyz has joined #commonlisp
mgl has joined #commonlisp
bilegeek has quit [Quit: Leaving]
random-jellyfish has joined #commonlisp
madnificent has joined #commonlisp
yitzi has joined #commonlisp
azimut has joined #commonlisp
zeka_ has quit [Remote host closed the connection]
zeka_ has joined #commonlisp
prxq has joined #commonlisp
<prxq> happy new year
<prxq> is there any graphical debugging for common lisp? Like with stepping and seeing variable values when hovering over the text...
skeemer has quit [Quit: WeeChat 4.1.1]
<madnificent> prxq: I thought there was a slime stepper but I never got used to it. Perhaps I did not dive deep enough. My duct tape solution is adding break (often with a helper macro). Sly has stickers which solve a slightly different use-case but they're often better suited than stepping.
<ixelp> GitHub - joaotavora/sly-stepper: sly-slepper
traidare has quit [Ping timeout: 252 seconds]
<prxq> madnificent: thanks
<prxq> you are right that looks more useful than old-school stepping :-)
<madnificent> prxq: I vaguely remember arriving at lisp long ago and asking for a stepper. It created a long argument as to why that was much harder in lisp and that you did not need it. After all this time, I'd still like a stepper that interactively does the magic to jump to the right spot. Might be hard or impossible, would be nice.
<madnificent> prxq: replaying sly stickers and the sly stepper are two different things seemingly built on the same basis.
Inline has quit [Quit: Leaving]
meritamen has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
kaskal has joined #commonlisp
meritamen has joined #commonlisp
traidare has joined #commonlisp
<paulapatience> gilberth: Would you be interested in having testers for noffi (i.e., me)? I could make good use of it.
mgl has quit [Ping timeout: 246 seconds]
meritamen has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
mgl has joined #commonlisp
Gleefre has joined #commonlisp
varjag has joined #commonlisp
meritamen has joined #commonlisp
meritamen has quit [Remote host closed the connection]
random-nick has joined #commonlisp
attila_lendvai has joined #commonlisp
attila_lendvai has quit [Ping timeout: 246 seconds]
decweb has joined #commonlisp
<beach> prxq: If you read my paper on debugging, you will see that the current state of debugging in free Common Lisp implementations is not great.
mgl has quit [Ping timeout: 256 seconds]
random-jellyfish has quit [Quit: Leaving]
OlCe has joined #commonlisp
josrr has joined #commonlisp
azimut has quit [Remote host closed the connection]
azimut has joined #commonlisp
Aesth has joined #commonlisp
tyson2 has joined #commonlisp
yitzi has quit [Ping timeout: 256 seconds]
yitzi has joined #commonlisp
unl0ckd has joined #commonlisp
rogersm has quit [Remote host closed the connection]
rogersm has joined #commonlisp
Aesth has quit [Read error: Connection reset by peer]
rogersm has quit [Remote host closed the connection]
rogersm has joined #commonlisp
rogersm has quit [Remote host closed the connection]
makomo has joined #commonlisp
rogersm has joined #commonlisp
rogersm has quit [Ping timeout: 252 seconds]
traidare has quit [Ping timeout: 260 seconds]
traidare has joined #commonlisp
jrx has joined #commonlisp
rogersm has joined #commonlisp
bjorkintosh has joined #commonlisp
bjorkintosh has joined #commonlisp
dnhester26 has joined #commonlisp
bjorkint0sh has quit [Ping timeout: 245 seconds]
<dnhester26> HI everyone
<dnhester26> In the spec it states that a lambda list with a &key argument without a symbol is equivalent to the one with the symbol version of the string of the argument; that is to say `(&key hello)` and `(&key :hello hello)` are equivalent
<ixelp> 3.4 Lambda Lists | Common Lisp (New) Language Reference
<dnhester26> Is there a style or preference over explicitly specifying the symbol or leaving it implicit?
<dnhester26> Does it affect code completion in emacs maybe?
<madnificent> dnhester26: I've mostly seen `&key foo bar` unless there's a specific need to override the defaults.
rogersm has quit [Remote host closed the connection]
<bike> it would actually be (&key ((:hello hello)))
rogersm has joined #commonlisp
<beach> dnhester26: it is usually left implicit unless there are good reasons not to.
skyl4rk has joined #commonlisp
<bike> the usual style is leaving it implicit. it's very rare to have it explicitly specified, and pointless if it's just the default symbol
<dnhester26> thanks bike beach
<dnhester26> I was thinking of leaving it implicit and started feeling guilty.. maybe from java days
<beach> Heh.
<duuqnd> honestly I didn't even know you could specify it explicitly
<beach> There are conventions like that, that develop as tacit agreements over time, and there is often no reason for or against.
<dnhester26> why is there a need for parentheses and then why two pairs? Is that style? From the spec I read that it expects an even number of elements after the `&key` keyword, or maybe it's. a list of even number of elements?
edr has joined #commonlisp
<beach> It is only one pair actually. The keyword parameter is a single object, so it can have an initarg and a supplied-p as in &key (hello nil hello-p) (goodbye 234 goodbye-p)
<beach> But then, if you specify the keyword, you need to turn the parameter into a list.
<beach> As in ((:hello hello) nil hello-p)
<dnhester26> thanks for that explanation
<beach> Pleasure.
varjag has quit [Quit: ERC (IRC client for Emacs 27.1)]
<dnhester26> what is a supplied-p? I just read in the glossary that it's just a logical evaluation of if the argument is defined as anything besides NIL then T otherwise undefined and NIL are NIL. But what is it for?
<dnhester26> in the hello-p
<dnhester26> The docs said to read 3.4.1 ordinary lambda lists but I didn't get very far from there
<madnificent> dnhester26: sometimes you may want to know if the keyword was supplied or not.
<dnhester26> thanks for the answer. But isn't that the same as just evaluating (if argument) what benefit is there to defining a new (if argument-p)?
<madnificent> dnhester26: perhaps to pass it along to another function (though you could combine with &args for that in many cases)
<beach> dnhester26: No it can be supplied as NIL.
<beach> ,(flet ((foo (&key (bar nil bar-p)) (list bar bar-p))) (list (foo) (foo nil)))
<ixelp> (flet ((foo (&key (bar nil bar-p)) (list bar bar-p))) (list (foo) (foo nil))) ERROR: Incorrect keyword arguments in (NIL) .
<dnhester26> beach: meaning argument-p will be true if the supplied argument was NIL?
<beach> No, it will be true if the argument was supplied.
<beach> ,(flet ((foo (&key (bar nil bar-p)) (list bar bar-p))) (list (foo) (foo :bar nil)))
<ixelp> (flet ((foo (&key (bar nil bar-p)) (list bar bar-p))) (list (foo) (foo :bar nil))) => ((NIL NIL) (NIL T))
Lord_of_Life has quit [Read error: Connection reset by peer]
cage has joined #commonlisp
<dnhester26> beach: meaning anything that's supplied even if it's NIL so that would be the difference between (if argument) and (if argument-p), they would only diverge if argument was supplied as NIL
<dnhester26> thanks I think I got it from the example
<beach> Good.
Lord_of_Life has joined #commonlisp
<dnhester26> beach: is that true though? my last sentence before the "thanks"
<beach> I think so, yes.
<dnhester26> thanks, just wanted to make sure I actually understood and not think I understood when I really didn't
reb has joined #commonlisp
<beach> If there is no semantic difference between supplying NIL and supplying nothing, there is no particular reason for the supplied-p.
<beach> But (related to what I am working on now) if you reinitialize a class, and you supply NIL as the direct superclasses, that's different from not supplying any superclasses at all. In the latter case, the old list of superclasses remains intact.
<dnhester26> the syntax `&key (name init-value name-p)` is really a shortcut CL is giving us instead of having to provide an object with make-instance and define the arguments with keys. Is that correct?
<beach> No, not at all. It is just a way to optionally supply an argument to a function.
<dnhester26> what is the old list of superclasses? is there a default object class? (I've yet to read the spec/book, I've been just using generics/methods without diving deep into the details with a bit of OO background from java)
<beach> Oh, that was an unnecessarily complicated example.
<beach> You can't compare it to most languages, because in most languages you can't change an object after creation.
<beach> Let me find a simpler example for you.
<dnhester26> "The keyword parameter is a single object, so it can have an initarg and a supplied-p" since you said object and initarg I thought it was a CLOS object a macro defining it...
<madnificent> dnhester26: the difference with traditional languages is that you can redefine classes in lisp. whether you supply a value or supply nil can mean different things. ignore it for the rest, but super interesting!!!!
<beach> dnhester26: Any Lisp datum is an object.
<dnhester26> beach: that was enough of an explanation, I got it
<beach> dnhester26: See the glossary under "object".
<madnificent> s/traditional/mainstream/
<dnhester26> madnificent: got it, thanks!
<dnhester26> beach: will do
<beach> I can't find a simple example. Sorry.
<dnhester26> beach: no worries, I understood it from the explanation already
<dnhester26> ok I guess I have read a bit more than what I said
Aesth has joined #commonlisp
<dnhester26> beach: object in the glossary says either any data (datum is written in there) or object of type, but reading https://lisp-docs.github.io/cl-language-reference/chap-7/h-b-object-creation-and-initialization#711-initialization-arguments sounds like any instance is also called an object
<ixelp> 7.1 Object Creation and Initialization | Common Lisp (New) Language Reference
<dnhester26> but in conclusion object just means any data, if it says object and then a type it means an instance of a class. is that correct?
yitzi has quit [Remote host closed the connection]
<madnificent> (defun drill-operation (&key (drill-size 8 drill-size-p) (rpm 1000)) (apply #'set-drill (when drill-size-p :drill-size drill-size)) (spool-up-drill rpm) (drill))
<madnificent> When you have a bunch of arguments and conditionally want to forward them to another function when they're explicitly set, then you'd want to know _if_ they were set.
<madnificent> It might also be handy for error conditions. A lookup data structure could signal an error when a key is not found, unless a default is supplied. A sensible default could be nil. Calling (lookup unavailable-key lookup-table) would error out, and (lookup unavailable-key lookup-table :default nil) could yield nil instead.
<dnhester26> madnificent thanks
<beach> dnhester26: Yes, any object is an instance of some class: ,(class-of 234)
<ixelp> (class-of 234) => #<BUILT-IN-CLASS FIXNUM>
rogersm has quit [Quit: Leaving...]
<dnhester26> thanks
<madnificent> beach: though that could be confusing with respect to CLOS because they can't be subclassed in defclass, right?
<beach> DEFCLASS defines standard classes and not built-in classes, so there should not be any confusion possible.
<aeth> it is a bit confusing in terminology
<ixelp> CLHS: Section The Types and Classes Dictionary
<aeth> since you have standard-class, structure-class, built-in-class
<aeth> from defclass, defstruct, and ???
<beach> aeth: What makes you think it is confusing?
<aeth> beach: because they're all classes in the standard, but one of them is "standard-class"
<beach> Oh, that one. Sure.
<beach> Yes, "standard class" is different from "standardized class".
<aeth> and then there's this
<aeth> ,(class-of (make-condition 'error))
<ixelp> (class-of (make-condition 'error)) => #<STANDARD-CLASS ERROR>
<aeth> A fourth class, but only sometimes. It is in SBCL, but not in the CCL the bot uses, as we can see.
<beach> Sure, and FIXNUM is not necessarily a class as in my previous example.
<beach> The standard allows considerable freedom for implementations.
madnificent has quit [Remote host closed the connection]
<beach> What would be the fourth class?
<aeth> SBCL calls it #<SB-PCL::CONDITION-CLASS COMMON-LISP:ERROR>
<beach> Oh, I see.
yewscion has joined #commonlisp
rgherdt has joined #commonlisp
Kyuvi has joined #commonlisp
dnhester26 has quit [Remote host closed the connection]
deadmarshal_ has quit [Ping timeout: 268 seconds]
dirtcastle has quit [Ping timeout: 255 seconds]
dnhester26 has joined #commonlisp
traidare has quit [Ping timeout: 255 seconds]
tyson2 has quit [Remote host closed the connection]
puke has quit [Ping timeout: 246 seconds]
dino_tutter has quit [Ping timeout: 276 seconds]
sunset_NOVA has joined #commonlisp
sunset_NOVA has quit [Client Quit]
jonatack has quit [Ping timeout: 264 seconds]
Kyuvi has quit [Ping timeout: 250 seconds]
Aesth has quit [Read error: Connection reset by peer]
kevingal has joined #commonlisp
yewscion has quit [Ping timeout: 252 seconds]
puke has joined #commonlisp
puke has quit [Max SendQ exceeded]
NicknameJohn has quit [Ping timeout: 252 seconds]
NicknameJohn has joined #commonlisp
Inline has joined #commonlisp
yitzi has joined #commonlisp
unl0ckd has quit [Ping timeout: 268 seconds]
dnhester26 has quit [Remote host closed the connection]
unl0ckd has joined #commonlisp
traidare has joined #commonlisp
ronald has joined #commonlisp
rtypo has joined #commonlisp
yewscion has joined #commonlisp
NicknameJohn has quit [Ping timeout: 252 seconds]
deadmarshal_ has joined #commonlisp
dirtcastle has joined #commonlisp
jrx has quit [Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.1.50)]
tyson2 has joined #commonlisp
nalbyuites has quit [Ping timeout: 268 seconds]
tyson2 has quit [Remote host closed the connection]
tyson2 has joined #commonlisp
Kyuvi has joined #commonlisp
dnhester26 has joined #commonlisp
green_ has quit [Ping timeout: 245 seconds]
Alfr has quit [Quit: Leaving]
tyson2 has quit [Remote host closed the connection]
igemnace has quit [Remote host closed the connection]
tmtt has joined #commonlisp
<tmtt> Hi! Is there a way to convert a symbol to a keyword in common lisp? (I'm making a macro that take some symbols and pass them to a function that takes keywords as parameters, e.g. `(mymacro GET)` should give `(somefunction :method :GET)`)
<beach> (intern (symbol-name symbol) (find-package "KEYWORD"))
<beach> ,(intern (symbol-name symbol) (find-package "KEYWORD"))
<ixelp> (intern (symbol-name symbol) (find-package "KEYWORD")) ERROR: Unbound variable: SYMBOL
<beach> ,(intern (symbol-name 'hello) (find-package "KEYWORD"))
<ixelp> (intern (symbol-name 'hello) (find-package "KEYWORD")) => :HELLO; NIL
<tmtt> thanks!
<beach> Pleasure.
<beach> clhs intern
<ixelp> CLHS: Function INTERN
yitzi has quit [Ping timeout: 256 seconds]
pfdietz has quit [Ping timeout: 250 seconds]
yitzi has joined #commonlisp
zeka_ has quit [Remote host closed the connection]
<beach> OK, so ,(intern (symbol-name 'hello) "KEYWORD") should work as well.
<ixelp> (intern (symbol-name 'hello) "KEYWORD") => :HELLO; NIL
rogersm has joined #commonlisp
Pixel_Outlaw has joined #commonlisp
zeka_ has joined #commonlisp
seok has quit [Quit: Client closed]
seok has joined #commonlisp
dnhester26 has quit [Remote host closed the connection]
green_ has joined #commonlisp
tyson2 has joined #commonlisp
seok has quit [Quit: Client closed]
seok has joined #commonlisp
green_ has quit [Ping timeout: 264 seconds]
mgl has joined #commonlisp
chomwitt has joined #commonlisp
pfdietz has joined #commonlisp
dino_tutter has joined #commonlisp
dnhester26 has joined #commonlisp
dnhester26 has quit [Remote host closed the connection]
dnhester26 has joined #commonlisp
chomwitt has quit [Ping timeout: 256 seconds]
tyson2 has quit [Read error: Connection reset by peer]
mgl has quit [Ping timeout: 256 seconds]
green_ has joined #commonlisp
rogersm has quit [Remote host closed the connection]
clos-encounters has joined #commonlisp
<clos-encounters> Anybody happen to know why, seemingly all of a sudden, asdf is rewriting the names of dependencies to replace `/` with `--` ?
<clos-encounters> (strong emphasis on "seemingly")
<bike> rewriting the names? like, what, in the files?
seok has quit [Quit: Client closed]
<clos-encounters> Na like during system loading. I go to load a system `foo/bar` and I get an error that system `foo--bar` cannot be found.
seok has joined #commonlisp
<clos-encounters> Mostly I wondered if anybody has encountered anything even remotely like this -- I certainly haven't
Aesth has joined #commonlisp
rogersm has joined #commonlisp
tyson2 has joined #commonlisp
pfdietz has quit [Ping timeout: 250 seconds]
<bike> nope, that's news to me. asdf has been encouraging / names for a while, so it would be pretty mercurial to suddenly not want it
rogersm has quit [Remote host closed the connection]
<clos-encounters> thanks for the thoughts anyway. I think it has something to do with a very peculiar emacs/slime configuration and/or cacheing context. I've just succesfully loaded the offending system outside of slime without issue.
attila_lendvai has joined #commonlisp
rogersm has joined #commonlisp
tmtt has quit [Ping timeout: 240 seconds]
NotThatRPG has joined #commonlisp
Kyuvi has quit [Ping timeout: 250 seconds]
tyson2 has quit [Ping timeout: 264 seconds]
dnhester26 has quit [Remote host closed the connection]
rogersm has quit [Remote host closed the connection]
makomo has quit [Quit: WeeChat 4.1.2]
makomo has joined #commonlisp
makomo has quit [Client Quit]
tmtt has joined #commonlisp
tmtt has quit [Client Quit]
_cymew_ has quit [Ping timeout: 264 seconds]
_cymew_ has joined #commonlisp
clos-encounters has quit [Ping timeout: 245 seconds]
dajole has joined #commonlisp
_cymew_ has quit [Ping timeout: 264 seconds]
makomo has joined #commonlisp
makomo has quit [Client Quit]
dnhester26 has joined #commonlisp
makomo has joined #commonlisp
yewscion has quit [Ping timeout: 256 seconds]
tmtt has joined #commonlisp
tmtt1 has joined #commonlisp
reb has quit [Ping timeout: 260 seconds]
Gleefre has quit [Remote host closed the connection]
tmtt has quit [Ping timeout: 256 seconds]
kevingal has quit [Ping timeout: 255 seconds]
pfdietz has joined #commonlisp
reb has joined #commonlisp
tiskaan has joined #commonlisp
triffid has joined #commonlisp
pfdietz has quit [Ping timeout: 250 seconds]
triffid has quit [Remote host closed the connection]
triffid has joined #commonlisp
reb has quit [Remote host closed the connection]
reb has joined #commonlisp
prokhor has quit [Ping timeout: 268 seconds]
triffid has quit [Read error: Connection reset by peer]
triffid has joined #commonlisp
kevingal has joined #commonlisp
dnhester26 has quit [Ping timeout: 255 seconds]
dnhester26 has joined #commonlisp
rogersm has joined #commonlisp
rogersm has quit [Remote host closed the connection]
rogersm has joined #commonlisp
kevingal has quit [Ping timeout: 256 seconds]
prokhor has joined #commonlisp
rogersm has quit [Ping timeout: 252 seconds]
yewscion has joined #commonlisp
<yottabyte> I don't use in-package typically, should I be? but I ask because if I don't use it, what's the default package I'm in? cl-user? that being said, when I ql:quickload something, how can I call of the functions/etc. directly without having to prefix them?
<yottabyte> I think it'll tell me if it's overwriting something that's already in my current default package (I am confident for this one there's no overlap though)
<bike> when you start up lisp you'll be in cl-user.
<aeth> Yes, if you don't use packages, you're probably using cl-user, I'm guessing, but you don't have to guess because you can just try printing the global *package*
<bike> you should use in-package if you'd like your code to be usable by other people or yourself without having to worry about name conflicts
<aeth> name conflicts are surprisingly easy... you can't even USE both alexandria and uiop, the two most common utility libraries, without name conflicts
tiskaan has quit [Ping timeout: 256 seconds]
epony has quit [Remote host closed the connection]
<aeth> you can avoid name conflicts with a hyphen prefix... but at that point make the hyphen a colon and it's now a package (if you define the package first... and technically :: unless you export it... but that's getting into technicalities).
tmtt1 has quit [Quit: Leaving.]
<yottabyte> yup, I'm in package common-lisp-user
green_ has quit [Ping timeout: 256 seconds]
<yottabyte> does a new package inherit everything from cl-user?
<yottabyte> hmmm it appears not to
<yitzi> yottabyte: what is inherited in new packages is implementation dependent. Some import CL.
epony has joined #commonlisp
<yottabyte> so I've quickloaded this: https://github.com/hipeta/arrow-macros/tree/master, how can I user the macros without needing to prefix them?
<ixelp> GitHub - hipeta/arrow-macros: Arrow-macros provides Clojure-like arrow macros in Common Lisp
<yitzi> Use :import-from or :use ... https://novaspec.org/cl/f_defpackage
<ixelp> defpackage | Common Lisp Nova Spec
zxcvz has joined #commonlisp
<yottabyte> thanks
zxcvz has quit [Client Quit]
prokhor has quit [Remote host closed the connection]
Lycurgus has quit [Quit: leaving]
NicknameJohn has joined #commonlisp
mgd has joined #commonlisp
<mgd> Hello. Other than NYXT, are there any other examples of everyday applications written in common lisp?
<paulapatience> xindy for latex
<ixelp> GitHub - azzamsa/awesome-cl-software: List of awesome application software built with Common Lisp
dnhester26 has quit []
yewscion has quit [Ping timeout: 256 seconds]
<mgd> Thank you @yitzi and @paulapatience
NicknameJohn has quit [Ping timeout: 255 seconds]
jonatack has joined #commonlisp
yitzi has quit [Remote host closed the connection]
amb007 has quit [Remote host closed the connection]
amb007 has joined #commonlisp
chomwitt has joined #commonlisp
cage has quit [Quit: rcirc on GNU Emacs 29.1]
tyson2 has joined #commonlisp
tyson2` has joined #commonlisp
tyson2` has quit [Remote host closed the connection]
tyson2 has quit [Remote host closed the connection]
Krystof has joined #commonlisp
tyson2 has joined #commonlisp
Aesth has quit [Read error: Connection reset by peer]
tiskaan has joined #commonlisp
traidare has quit [Ping timeout: 268 seconds]
tyson2 has quit [Remote host closed the connection]
shka has quit [Ping timeout: 260 seconds]
dajole has quit [Quit: Connection closed for inactivity]
<hexology> using CASE, is there a way to match the list '(:XYZ) ?
<hexology> i tried (case '(:xyz) ((:xyz) t)) but got nil
<hexology> ah, i see the lists are equal but not eql. is that why?
loocser has joined #commonlisp
mgl has joined #commonlisp
attila_lendvai has quit [Ping timeout: 268 seconds]
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
tyson2 has joined #commonlisp
<random-nick> alexandria has a SWITCH macro which is like CASE but takes a test function
varjagg has joined #commonlisp
<edgar-rft> hexology: yes, CASE uses EQL but lists need EQUAL, a builtin alternative is (cond ((equal <list> '(:XYZ)) <code>)
varjagg has quit [Remote host closed the connection]
<random-nick> also, I think you might have to use ((:xyz)) as the case
<bike> yeah, but that would only match an eql list, so it's probably still not useful
<bike> alexandria has a SWITCH macro to do a CASE with arbitrary predicate.
<hexology> thanks
<hexology> i had actually refactored this away from cond, let me see what alexandria has
<hexology> i was also looking into trivia
<hexology> yeah, trivia:match works here
<hexology> as does alexandria:switch with :test #'equal
mgd has quit [Remote host closed the connection]
anticomputer has quit [Ping timeout: 240 seconds]
gxt has quit [Ping timeout: 240 seconds]
anticomputer_ has joined #commonlisp
azimut_ has joined #commonlisp
triffid has quit [Ping timeout: 240 seconds]
azimut has quit [Ping timeout: 240 seconds]
chiselfuse has quit [Ping timeout: 240 seconds]
son0p has quit [Ping timeout: 260 seconds]
tiskaan has quit [Ping timeout: 252 seconds]
tyson2 has quit [Read error: Connection reset by peer]
chiselfuse has joined #commonlisp
gxt has joined #commonlisp
triffid has joined #commonlisp
pve has quit [Quit: leaving]
bjorkintosh has quit [Quit: Leaving]
pfdietz has joined #commonlisp
gxt has quit [Ping timeout: 240 seconds]
mgl has quit [Ping timeout: 260 seconds]
gxt has joined #commonlisp
triffid has quit [Remote host closed the connection]
_triffid has joined #commonlisp
Kyuvi has joined #commonlisp
loocser has quit [Ping timeout: 264 seconds]
rogersm has joined #commonlisp
unl0ckd has quit [Ping timeout: 268 seconds]
ym has quit [Ping timeout: 260 seconds]
rogersm has quit [Ping timeout: 255 seconds]
waleee has joined #commonlisp
dajole has joined #commonlisp
tiskaan has joined #commonlisp
NicknameJohn has joined #commonlisp
dino_tutter has quit [Ping timeout: 268 seconds]
NicknameJohn has quit [Ping timeout: 252 seconds]
donleo has quit [Ping timeout: 256 seconds]