<stylewarning>
Still a ways to go, but strongly typed parametric polymorphism in otherwise bog standard Lisp code is a dream
iovec has quit [Quit: Connection closed for inactivity]
megalography has joined #lisp
kajo has quit [Quit: From my rotting body, flowers shall grow and I am in them and that is eternity. -- E. M.]
<makomo>
stylewarning: i was reading your thoughts.md file the other day
<makomo>
(regarding Coalton)
<makomo>
stylewarning: what's the issue regarding Computed GOTO that you mention?
<makomo>
does the issue appear when you have all three of those constraints: constant time, constant memory, respects the lexical environment?
<makomo>
only when*
<makomo>
so picking 2 out of 3 would be doable or something?
<stylewarning>
I think something like that yes
<stylewarning>
I don’t think you can feasibly do the first and last because it’s O(n) time to build the memory
frodef has quit [Ping timeout: 245 seconds]
<ebrasca>
Why ML?
<jasom>
ebrasca: the usual answer to that question is algebraic data types + pattern matching
* jasom
has always thought it would be fun to make a thin wrapper for algebraic data types on lisp, but it's a significant project
<jasom>
something that would actually be smart about inserting type declarations that are revealed (e.g. emit something like (let ((x (cadr y)) (declare (type foo x)) ...) when y is known to be of type (list foo))
Bike has joined #lisp
<aeth>
Interesting. I just found out about another historic Lisp that's pretty obscure and with comparatively very little information (not even a Wikipedia article). "Cambridge Lisp" for the Amiga. This 1987 review complains about how different from CL it is. https://www.atarimagazines.com/startv1n4/cambridgelisp.html
<aeth>
I guess it was a commercial failure. $200 and very incompatible with everything.
arpunk has joined #lisp
<jasom>
googling tells me that there was a "combridge lisp" implemented in bcpl shortly after lisp/370
<aeth>
Incompatible 16-bit Lisp that wasn't used by many and probably didn't have interesting features compared to the big lispms, so I'm not surprised that it's very obscure.
quazimodo has joined #lisp
<aeth>
jasom: I think you can get pattern matching in vanilla Lisp through a sufficiently advanced macro (perhaps requiring CLtL2, idk... I think you could just expand it into nested typecases)
<jasom>
aeth: optima does pattern matching, including type based matching and destructuring, but see also the lack of an algebraic type-system in lisp
<jasom>
also I think there is no portable way to get information about enclosing lexical bindings in a macro, so you can't enforce completeness of pattern matches in a meaningful way.
xkapastel has quit [Quit: Connection closed for inactivity]
<aeth>
jasom: Well I think that's the real problem: making sure that all cases are covered.
<aeth>
jasom: Something a lot of pattern matching languages would have, translated into Common Lisp, is afaik something along the lines of: if you define a member type, then you can ensure that every branch (i.e. every member of the member type) is handled in the cases... so if you redefine (deftype colors () `(member :red :green :blue)) to now be (member :red :green :blue :yellow) you should get compilation errors
<aeth>
jasom: But I think you can still get that in CL if you just replace directly using the DEFTYPE to define member types like that to using some custom macro.
<jasom>
aeth: right, but ML will infer the type you are matching on, and that's just not possible in CL, even if one line above your match macro you declared the type of the variable you are matching on!
<stylewarning>
Trying to do pattern matching with Lisp’s feeble type system is a bad idea
<stylewarning>
Lisp types have almost no algebraic structure
<stylewarning>
It’s all sets
<aeth>
stylewarning: I'm not sure I agree. There's MEMBER, there's OR, and there's DEFSTRUCT/DEFCLASS.
<aeth>
I guess there's even AND, but good luck handling that.
<stylewarning>
There’s nothing parametric
<stylewarning>
Barring a few outliers
<stylewarning>
Pattern matching is good when the types themselves have structure
<stylewarning>
AND/OR are structureless free roaming set operations
<jasom>
and there's no recursion which limits the use of the parametric types that do exist.
<stylewarning>
You can’t reasonably make a “tree of X” type in CL
<stylewarning>
And trees are the kind of thing you’d want to match on
anewuser has joined #lisp
<aeth>
stylewarning: The way you'd do that is defstruct with slots with :type. I've done that for typed linked lists. Trees would be just a bit trickier. Of course, you're looking at a 30% performance loss on SBCL, and not every implementation will respect :type in defstruct slots. (defclass will be even worse here)
<aeth>
(Actually using conses and type checking there would have to walk through the whole list afaik)
<aeth>
This is definitely an area where a language extension would be ideal.
<aeth>
You'd also probably want a true way to say (maybe foo) because (or null foo) won't work on symbols, lists, or booleans.
markoong has quit [Quit: Konversation terminated!]
<stylewarning>
aeth, you will not get much mileage out of that
<stylewarning>
And in the end you have a monomorphic type anyway
<stylewarning>
Which pattern matching doesn’t help with
<stylewarning>
Yes what you said about “maybe” gets to the root of the problem, algebraic parametric polymorphism
Kundry_Wag has quit [Remote host closed the connection]
engblom has quit [Read error: Connection reset by peer]
<akater>
beach: no, :allow-other-keys t doesn't seem to work.
<beach>
:(
<no-defun-allowed>
aha, that's what "validity checking" would be
<akater>
I'm not even sure how to do it globally withot total redefinition of primary method with &allow-other-keys
<akater>
^ “globally” as in “for all changes to a certain class”
<akater>
Oh no, turns out I put :allow-other-keys t in the wrong arglist.
<akater>
It did work, thanks beach.
<beach>
Oh, good.
<adam4567>
Quick question. Anyone got a reference on how to upgrade ASDF from 2 to 3? Linux, Lisp, Slime etc
<akater>
adam4567: 3.4 in ASDF Manual addresses this.
gravicappa has quit [Ping timeout: 245 seconds]
atgreen has joined #lisp
FreeBirdLjj has joined #lisp
wxie has joined #lisp
wxie has quit [Ping timeout: 245 seconds]
wxie has joined #lisp
<adam4567>
akater: OK.
dimpase_ has joined #lisp
dimpase_ has quit [Quit: leaving]
pierpal has joined #lisp
quazimodo has quit [Ping timeout: 240 seconds]
eschatologist_ has joined #lisp
eschatologist has quit [Ping timeout: 240 seconds]
frodef has quit [Ping timeout: 246 seconds]
Krystof has quit [Ping timeout: 245 seconds]
<adam4567>
akater: ASDF Manual s3.4, suggests using install tool install-asdf.lisp I'm not sure if I need a complete ASDF Git-pull and build first though.
<littlelisper>
how can i use both, event loop actions and the callbacks
Josh_2 has joined #lisp
ntbre has quit [Quit: ntbre]
rtypo has quit [Ping timeout: 250 seconds]
phlm has joined #lisp
phlm has quit [Client Quit]
Inline has joined #lisp
xkapastel has joined #lisp
shrdlu68 has quit [Quit: WeeChat 2.3]
JetJej has joined #lisp
ntbre has joined #lisp
<beach>
littlelisper: What is your reason for using ltk rather than McCLIM?
<Josh_2>
That's like personally insulting beach /s
<beach>
What?
<beach>
It's a simple question.
<Josh_2>
It was a joke :)
<beach>
Oh. :)
<Josh_2>
/s means sarcasm :P
<beach>
Sorry, missed it.
<beach>
I am asking because if there is anything that littlelisper is missing in McCLIM, we should put it on the TODO list.
<pjb>
</s>
<beach>
Or, we *might* put it on the TODO list, depending on what it is.
nanoz has joined #lisp
jprajzne has quit [Quit: Leaving.]
FreeBirdLjj has joined #lisp
Krystof has quit [Ping timeout: 240 seconds]
anewuser has quit [Quit: anewuser]
marvin2 has joined #lisp
rippa has joined #lisp
Krystof has joined #lisp
<_death>
littlelisper: not sure I understand what you're trying to do, but ltk has an AFTER function that you can use to perform an action after a duration of time
juristi has quit [Quit: WeeChat 1.0.1]
FreeBirdLjj has quit [Remote host closed the connection]
edgar-rft has quit [Quit: Leaving]
FreeBirdLjj has joined #lisp
<littlelisper>
no, theres nothing missing beach. the documentation is too sparse. the only guide i have is clim2 UG by franz. i am on my way to mcclim
<littlelisper>
thanks _death, thats exactly what i was looking for
FreeBirdLjj has quit [Remote host closed the connection]
<LdBeth>
<freenode__de "did you remember to file those T"> _death: well, I worked with version control
<_death>
LdBeth: it was joke.. a reference to Office Space
rumbler31 has joined #lisp
<LdBeth>
GG
dale_ has joined #lisp
dale_ is now known as dale
littlelisper has quit [Quit: Page closed]
Essadon has joined #lisp
milivoj has joined #lisp
FreeBirdLjj has joined #lisp
milivoj has quit [Ping timeout: 268 seconds]
milivoj has joined #lisp
trafaret1 has joined #lisp
<trafaret1>
sup
FreeBirdLjj has quit [Remote host closed the connection]
cage_ has joined #lisp
ntbre has quit [Quit: ntbre]
blackwolf has joined #lisp
gigetoo has quit [Ping timeout: 240 seconds]
akater1 has joined #lisp
milivoj has quit [Read error: Connection reset by peer]
gigetoo has joined #lisp
akater has quit [Ping timeout: 256 seconds]
milivoj has joined #lisp
ntbre has joined #lisp
nowhere_man has quit [Ping timeout: 245 seconds]
moei has joined #lisp
Oberon4278 has joined #lisp
sjl has joined #lisp
FreeBirdLjj has joined #lisp
milivoj has quit [Read error: Connection reset by peer]
milivoj has joined #lisp
trafaret1 has quit [Read error: Connection reset by peer]
shka_ has joined #lisp
FreeBirdLjj has quit [Ping timeout: 245 seconds]
ismay has quit [Ping timeout: 245 seconds]
Achylles has quit [Remote host closed the connection]
orivej has quit [Ping timeout: 250 seconds]
orivej has joined #lisp
igemnace has quit [Ping timeout: 244 seconds]
nowhere_man has joined #lisp
matijja has joined #lisp
matijja has quit [Remote host closed the connection]
matijja has joined #lisp
Zaab1t has joined #lisp
ntbre has quit [Quit: ntbre]
Josh_2 has quit [Ping timeout: 246 seconds]
nullheroes has quit [Quit: WeeChat 1.9.1]
nullheroes has joined #lisp
Denommus has joined #lisp
DGASAU has quit [Read error: Connection reset by peer]
ntbre has joined #lisp
m00natic has quit [Ping timeout: 245 seconds]
tkhno has joined #lisp
flazh has quit [Ping timeout: 250 seconds]
Denommus has quit [Remote host closed the connection]
DGASAU has joined #lisp
xkapastel has quit [Quit: Connection closed for inactivity]
markoong has joined #lisp
varjag has joined #lisp
ntbre has quit [Quit: ntbre]
karlosz has joined #lisp
eschatologist has joined #lisp
igemnace has joined #lisp
eschatologist_ has quit [Ping timeout: 240 seconds]
ecraven has quit [Ping timeout: 250 seconds]
flazh has joined #lisp
Denommus has joined #lisp
igemnace has quit [Remote host closed the connection]
ecraven has joined #lisp
igemnace has joined #lisp
Josh_2 has joined #lisp
milivoj_ has joined #lisp
xkapastel has joined #lisp
ntbre has joined #lisp
milivoj has quit [Ping timeout: 244 seconds]
milivoj_ is now known as milivoj
karlosz has quit [Quit: karlosz]
nikkal has joined #lisp
LiamH has joined #lisp
Zaab1t has quit [Quit: bye bye friends]
igemnace has quit [Remote host closed the connection]
makomo has joined #lisp
igemnace has joined #lisp
gxt has quit [Ping timeout: 252 seconds]
Denommus has quit [Remote host closed the connection]
igemnace has quit [Remote host closed the connection]
igemnace has joined #lisp
nikkal has quit [Ping timeout: 245 seconds]
hiroaki has quit [Ping timeout: 240 seconds]
optikalmouse has joined #lisp
optikalmouse has quit [Client Quit]
ntbre has quit [Quit: ntbre]
karlosz has joined #lisp
gxt has joined #lisp
narendraj9 has joined #lisp
hiroaki has joined #lisp
Denommus has joined #lisp
nikkal has joined #lisp
jxy has quit [Quit: leaving]
sauvin has quit [Read error: Connection reset by peer]
edgar-rft has joined #lisp
karlosz has quit [Quit: karlosz]
igemnace has quit [Remote host closed the connection]
igemnace has joined #lisp
skidd0 has joined #lisp
<skidd0>
hello! With multi-line doc strings (and strings in general) do I need to escape a newline?
<verisimilitude>
No.
<skidd0>
okay great. Thanks!
jxy has joined #lisp
<verisimilitude>
Do you have an REPL already, skidd0?
<verisimilitude>
If so, you'll find it much quicker to simply test questions such as this there, in the future.
<skidd0>
i guess that's true
<skidd0>
thanks
<skidd0>
tho i'd contest your claim that it's quicker
<skidd0>
asking here got a reply in seconds
<verisimilitude>
Still, you can get caught believing something is standard when it isn't this way, so do use proper judgement, yes.
<verisimilitude>
Also, the REPL would've taken far less than a second.
<skidd0>
i'd have to type up a defun
<skidd0>
to test. right?
<verisimilitude>
No.
<verisimilitude>
A documentation string is just a string, so just test a string.
<skidd0>
oh, there's nothing special about how the compiler handles it?
Arcaelyx has joined #lisp
<verisimilitude>
The reader macro for " is what handles string parsing.
<skidd0>
okay. I've not gotten into reader macros yet. All i know is that they are 'a thing'. #'something has a # reader macro then, right?
<shka_>
skidd0: you don't need to define your own reader macros
<skidd0>
are :keywords handled by a reader macro as well? or are they just a regular symbol?
<skidd0>
shka_: no, certainly not
<verisimilitude>
The # reader macro is a dispatch reader macro, which reads in the next character and calls a reader macro with an extra argument and whatnot.
<verisimilitude>
Keywords are handled by symbol parsing.
<shka_>
i literally defined one useful reader macro
<skidd0>
okay thank you verisimilitude
<shka_>
in my whole life
<verisimilitude>
Still, shka_ is on point; you don't need to worry about this right now, skidd0.
<skidd0>
well yeah. i'm just asking and trying to confirm my limited understanding
<skidd0>
i don't want to build layers on shaky foundation
<verisimilitude>
That's the proper way to do it.
<shka_>
oh, that's fine
<shka_>
skidd0: really, if you want to save yourself some time ensure that you understand packages and read time evaluation, that would be enough to know for now
<skidd0>
i'm assuming you all are long time lispers, but, i'm curious if you remember how long it took after starting to learn lisp for it all ti "click"
<shka_>
reader macros are cool but not super useful
<skidd0>
what is read time eval? i've heard of compile time
makomo has quit [Ping timeout: 245 seconds]
<shka_>
yeah, well, that's the thing that you should understand the following things about the reader to safely go forward
<shka_>
1) read time!
<verisimilitude>
I don't believe it's bragging when I tell you it all clicked fairly easily, at least after the first month or so, skidd0.
<shka_>
2) symbols!
<shka_>
3) packages!
<skidd0>
verisimilitude: how would you define that "click"? like what observation or pattern/conenction did you see?
<verisimilitude>
In all likelihood, it was shorter than that, but still.
<shka_>
skidd0: i am pretty sure that practical common lisp is the best reference you can have
<skidd0>
thanks, shka_
<verisimilitude>
Have you ever read Stallman's recommendation for Lisp, skidd0?
<skidd0>
yeah i'm working through PCL and refer back to it all the time
<verisimilitude>
He describes it very well.
<skidd0>
verisimilitude: maybe. sounds familiar
<verisimilitude>
It contains ``Lisp is the most powerful programming language''.
<skidd0>
oh yes
<skidd0>
i read that last week
<verisimilitude>
That and some light reading should be enough; once you understand that, it ``clicks'', I suppose.
Josh_2 has quit [Remote host closed the connection]
<skidd0>
well then maybe it's already clicked
<skidd0>
for me
Josh_2 has joined #lisp
hiroaki has quit [Ping timeout: 240 seconds]
hiroaki has joined #lisp
makomo has joined #lisp
matijja has quit [Ping timeout: 246 seconds]
karlosz has joined #lisp
narendraj9 has quit [Ping timeout: 244 seconds]
travv0 has joined #lisp
karlosz has quit [Quit: karlosz]
igemnace has quit [Remote host closed the connection]
random-nick has quit [Read error: Connection reset by peer]
ntbre has joined #lisp
Josh_2 has quit [Ping timeout: 246 seconds]
igemnace has joined #lisp
cage_ has quit [Remote host closed the connection]
shka_ has quit [Ping timeout: 268 seconds]
Jesin has quit [Quit: Leaving]
milivoj has quit [Ping timeout: 244 seconds]
rippa has quit [Quit: {#`%${%&`+'${`%&NO CARRIER]
nanoz has quit [Read error: Connection reset by peer]
karlosz has joined #lisp
karlosz has quit [Client Quit]
random-nick has joined #lisp
Jesin has joined #lisp
dueyfinster has joined #lisp
lnostdal has quit [Remote host closed the connection]
pierpal has quit [Ping timeout: 272 seconds]
gxt has quit [Ping timeout: 264 seconds]
Josh_2 has joined #lisp
milivoj has joined #lisp
dvdl has joined #lisp
scymtym has quit [Ping timeout: 268 seconds]
Denommus has quit [Read error: Connection reset by peer]
JetJej has quit [Quit: [Quit]]
lnostdal has joined #lisp
nikkal has quit [Quit: Konversation terminated!]
igemnace has quit [Quit: WeeChat 2.3]
nikkal has joined #lisp
Oberon4278 has quit []
scymtym has joined #lisp
skidd0 has quit [Quit: WeeChat 2.3]
nikkal has quit [Ping timeout: 240 seconds]
gxt has joined #lisp
dvdl has quit [Ping timeout: 252 seconds]
wilfredh has joined #lisp
Bike has quit []
didi has joined #lisp
<didi>
TIL there's IGNORABLE. That's all.
<didi>
By macroexpanding ETYPECASE of all the things.
prite has quit [Ping timeout: 250 seconds]
varjag has quit [Quit: ERC (IRC client for Emacs 26.1)]
Mr-Potter has joined #lisp
<sjl>
Yep. Handy in macros.
quazimodo has joined #lisp
pierpal has joined #lisp
moei has quit [Quit: Leaving...]
karlosz has joined #lisp
ntbre has quit [Quit: ntbre]
random-nick has quit [Read error: Connection reset by peer]
dueyfinster has quit [Read error: Connection reset by peer]
Grauwolf has quit [Quit: WeeChat 2.3]
Essadon has quit [Quit: Qutting]
ntbre has joined #lisp
ntbre has quit [Client Quit]
ntbre has joined #lisp
tkhno has quit [Ping timeout: 250 seconds]
blackwolf has quit [Quit: ERC (IRC client for Emacs 26.1)]
metallicus has joined #lisp
<aeth>
didi: You often want it in your macros.
metallicus has quit [Client Quit]
<aeth>
In particular, anything in the style of WITH-ACCESSORS
karlosz has quit [Quit: karlosz]
Josh_2 has quit [Ping timeout: 245 seconds]
<verisimilitude>
I suppose I most commonly use IGNORABLE for special variables that I bind with &AUX but don't otherwise use.
<aeth>
Oh in case I was unclear, by in the style of WITH-ACCESSORS, I mean essentially a double binding. In with-accessors it's a let then a symbol-macrolet, and it's possible that the symbol-macrolet is working on a NIL list while the let binding is provided like this: (with-accessors () foo ...) ; more of something you'd see from a generating macro than something you'd write directly
troydm has quit [Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset]