wigust has quit [Remote host closed the connection]
hexfive has quit [Quit: WeeChat 1.9.1]
sz0 has quit [Quit: Connection closed for inactivity]
Jesin has quit [Quit: Leaving]
bjorkintosh has joined #lisp
rumbler31 has joined #lisp
libre-man has quit [Quit: WeeChat 1.8]
bjorkintosh has quit [Remote host closed the connection]
libre-man has joined #lisp
ryanbw has joined #lisp
bjorkintosh has joined #lisp
margeas has quit [Ping timeout: 240 seconds]
rumbler31 has quit [Ping timeout: 240 seconds]
dieggsy has joined #lisp
dieggsy has quit [Remote host closed the connection]
LiamH has quit [Quit: Leaving.]
fikka has joined #lisp
libre-man has quit [Quit: WeeChat 1.8]
libre-man has joined #lisp
libre-man has quit [Client Quit]
Oladon has joined #lisp
libre-man has joined #lisp
cromachina has joined #lisp
fikka has quit [Ping timeout: 255 seconds]
elimik31 has quit [Ping timeout: 255 seconds]
libre-man has quit [Quit: WeeChat 1.8]
libre-man has joined #lisp
libre-man has quit [Client Quit]
libre-man has joined #lisp
libre-man has quit [Client Quit]
libre-man has joined #lisp
libre-man has quit [Client Quit]
libre-man has joined #lisp
peterhil has quit [Read error: Connection reset by peer]
nowhere_man has joined #lisp
peterhil has joined #lisp
turkja has joined #lisp
jameser has joined #lisp
Xal has quit [Ping timeout: 255 seconds]
yrk has quit [Read error: Connection reset by peer]
Xal has joined #lisp
butterthebuddha has quit [Max SendQ exceeded]
python476 has quit [Ping timeout: 260 seconds]
butterthebuddha has joined #lisp
<rk[ghost]>
i understand the nature of the speed of IRC, but alas i ask anyways as no responses in lispweb yet
<rk[ghost]>
i am trying to grasp uploading a file over http using hunchentoot
rumbler31 has joined #lisp
<rk[ghost]>
currently, i seem only to be able to refer to the files name, not the file as an "object"
<pjb>
sending files to the server?
<pjb>
It has been too long since I used hunchentoot. New versions have been issued since.
<pjb>
Just read the documentation.
<rk[ghost]>
pjb: aye, i am trying to understand it
<rk[ghost]>
whilst at the same time, i don't understand how web works anyways (always stayed a 10-foot pole away from it)
<pjb>
sending files to the server would involve a POST request.
<rk[ghost]>
i got that far in understanding
<rk[ghost]>
i created what seems to be a 'form'
<pjb>
yes.
<rk[ghost]>
however, i am curious how to refer to such object. i was just expecting to refer to something like hunchentoot:posts to get the post object, but it seems to be less straightfowrad
<rk[ghost]>
i will continue to dive down the rabbit well
<rk[ghost]>
thanks thanks. i peeped around there a bit.
<rk[ghost]>
this situation is uncomfortable for me because i don't /want/ to learn web, but i have to in order to be helpful.. ha.
<pjb>
In hunchentoot, the data should be received by hunchentoot and available to a handler either as a parameter or thru a stream. Check hunchentoot documentation.
<rk[ghost]>
right, i guess i don't understand how hunchentoot is doing all its doing under its covers
<rk[ghost]>
and sicne i don't understand web, it makes it doubly confusing to have these handlers masked
<rk[ghost]>
i will continue to read the docs, thanks
<rk[ghost]>
doesn't help i don't want to actually learn web.. =P
<rumbler31>
your best bet is to sit in a repl and issue breaks in places
<pjb>
You don't really need to understand it, the HTML protocol can get sophisticated, with notion of chunks, etc. The file transfer is not simple. But it should be handled by hunchentoot.
<rk[ghost]>
the pain of being helpful :P
<rk[ghost]>
right oh.
<rk[ghost]>
rumbler31: right, oh. my current strategy is reloading the server over and over breakign it :P
<rumbler31>
rk[ghost]: what are you trying to do in genera
<pjb>
And since after the transfer of the file, the connection may stay up for further requests from the client, it cannot give you the socket stream; there's some wrapping of the file too.
<rk[ghost]>
ah!
<rk[ghost]>
pjb: that is what i hoped, when i orginially proposed this idea.. i /assumed/ that it should be very straightforward.. and i understood how to do the backend parts
<pjb>
IIRC hunchentoot saves the file somewhere and it gives you the pathname where it saved it.
<rk[ghost]>
rumbler31: i am trying to make a simple image uploader
<pjb>
But you would have to check the doc.
<rumbler31>
are you writing the frontend and backend?
<rk[ghost]>
pjb: ah.. see, again i assumed taht, i checked my filesystem to see if anything popped up in the local dir and such wasn't the case..
<rk[ghost]>
rumbler31: all ends.
fortitude has quit [Quit: Leaving]
<rumbler31>
i just showed up so maybe you know this already, but chrome dev tools are your friend
<rk[ghost]>
only thing i need of lisp/hunchentoot is to have an html page with a form to upload an image and to store the image with a unique name in a directory
<rk[ghost]>
everything else i solved.
<rk[ghost]>
hmm, i suppose i could install chrome.
<rumbler31>
i haven't used firefox dev tools but I know they exist
<rk[ghost]>
thanks for all yer help.. hopefully i can distill this beast.
<rumbler31>
once you dive in, you'll find it simpler than you thought
<rk[ghost]>
oh i know it will be, but i am stuck at the wall at the moment
<rk[ghost]>
thing is, i learn a lot better from code than i do from docs..
<rk[ghost]>
hunchentoot docs confuse me very much.
<rk[ghost]>
i expected in the function uploadar-page for the input parameter 'image' to be the image bitstream/file itself.. but it seems to be the name of the image
damke_ has quit [Ping timeout: 240 seconds]
Oladon has quit [Read error: Connection reset by peer]
<rk[ghost]>
to be honest, i was expecting this part of the code to already be written, some open source web-based image uploader. somehow i started attempting to write it myself.
Bike has joined #lisp
<rumbler31>
I take that back, hunchentoot will take some reading
<aeth>
How do I handle end of file stuff in (trivial-)gray-streams? It looks like most things are derived from a simple method definition e.g. stream-read-char/stream-write-char is all that's needed for stream-read-sequence/stream-write-sequence to work.
<aeth>
Except, e.g. if I do stream-read-line or read-line and there's no newline, I'll exhaust the heap because there was never an end.
<aeth>
I think my circular buffer that backs my char/byte streams needs to check for emptiness (well, have an emptyp field) and throw an EOF exception when it's empty? Is that how streams work?
<aeth>
I couldn't find good documentation, I've basically just been implementing methods and seeing what breaks and what works
__main__ has quit [*.net *.split]
orivej has quit [*.net *.split]
brendyn has quit [*.net *.split]
DeadTrickster_ has quit [*.net *.split]
gabiruh has quit [*.net *.split]
whyNOP has quit [*.net *.split]
``Erik has quit [*.net *.split]
intrigue has quit [*.net *.split]
mnoonan has quit [*.net *.split]
cross has quit [*.net *.split]
peccu has quit [*.net *.split]
jurov has quit [*.net *.split]
vyzo has quit [*.net *.split]
ircbrowse has quit [*.net *.split]
kushal has quit [*.net *.split]
lemoinem has quit [*.net *.split]
ym has quit [*.net *.split]
dmh has quit [*.net *.split]
ult has quit [*.net *.split]
catern has quit [*.net *.split]
aoh has quit [*.net *.split]
malcom2073 has quit [*.net *.split]
gabc has quit [*.net *.split]
vmonteco has quit [*.net *.split]
MetaYan has quit [*.net *.split]
dustyweb has quit [*.net *.split]
samebchase has quit [*.net *.split]
renard_ has quit [*.net *.split]
eagleflo has quit [*.net *.split]
sbryant has quit [*.net *.split]
mulk has quit [*.net *.split]
drdo has quit [*.net *.split]
Walex has quit [*.net *.split]
pok has quit [*.net *.split]
<rumbler31>
rk[ghost]: looks like you fist need to figure out what kind of post request is being made by the browser for you
<rumbler31>
if it is a multipart request, then hunchentoot seems to natively understand that it will return a path the the uploaded file to your handler
<Xach>
I had an image upload and manipulation service in hunchentoot for many years.
<Xach>
so lucrative!!
__main__ has joined #lisp
orivej has joined #lisp
brendyn has joined #lisp
DeadTrickster_ has joined #lisp
vmonteco has joined #lisp
lemoinem has joined #lisp
cross has joined #lisp
intrigue has joined #lisp
ircbrowse has joined #lisp
gabiruh has joined #lisp
ym has joined #lisp
whyNOP has joined #lisp
``Erik has joined #lisp
samebchase has joined #lisp
catern has joined #lisp
malcom2073 has joined #lisp
mnoonan has joined #lisp
dustyweb has joined #lisp
dmh has joined #lisp
kushal has joined #lisp
gabc has joined #lisp
vyzo has joined #lisp
peccu has joined #lisp
aoh has joined #lisp
jurov has joined #lisp
ult has joined #lisp
MetaYan has joined #lisp
Walex has joined #lisp
mulk has joined #lisp
eagleflo has joined #lisp
renard_ has joined #lisp
pok has joined #lisp
sbryant has joined #lisp
drdo has joined #lisp
stnutt has left #lisp [#lisp]
<rk[ghost]>
rumbler31: aye. originally i had just <input type=file and just had a simple form
<rk[ghost]>
which i cannot figure out if that works, or if i /need/ to have a multipart form
<rumbler31>
you only need to have whatever you can handle
<rumbler31>
but
<rumbler31>
what is important is what the browser's post message contains
<rk[ghost]>
ah
<rumbler31>
so you need to get that
<rumbler31>
so if you can open chrome dev toosl while your browser makes the request
mson has quit [Quit: Connection closed for inactivity]
threh has joined #lisp
djuber has quit [Ping timeout: 248 seconds]
sz0 has joined #lisp
threh has quit [Ping timeout: 260 seconds]
threh has joined #lisp
Xal has quit [Read error: Connection reset by peer]
fikka has joined #lisp
Xal has joined #lisp
Xal has quit [Client Quit]
igemnace has joined #lisp
pjb has quit [Ping timeout: 264 seconds]
fikka has quit [Ping timeout: 268 seconds]
Arcaelyx has quit [Read error: Connection reset by peer]
Arcaelyx has joined #lisp
Xal has joined #lisp
attila_lendvai has quit [Quit: Leaving.]
eSVG has joined #lisp
pfdietz has joined #lisp
White_Flame has quit [Ping timeout: 248 seconds]
pjb has joined #lisp
raynold has quit [Quit: Connection closed for inactivity]
rumbler31 has quit [Remote host closed the connection]
aoeu256 has quit [Ping timeout: 250 seconds]
milanj has quit [Quit: This computer has gone to sleep]
FreeBirdLjj has quit [Read error: Connection reset by peer]
<beach>
Good morning everyone!
FreeBirdLjj has joined #lisp
mson has joined #lisp
<aeth>
I now have pipes I can read and write from! Surprisingly concise with trivial-gray-streams and an already-written buffer implementation. Very few things actually needed to be defined. So now I can construct input streams by writing to them or parse output streams by reading from them, e.g. reading a program's output one line at a time.
<aeth>
Some methods not implemented and no way of handling when the circular buffer becomes full (un-hardcode the size and create a new buffer of twice the size when full?), but otherwise working.
pjb has quit [Ping timeout: 258 seconds]
threh has joined #lisp
jealousmonk has quit [Quit: Leaving]
sjl has joined #lisp
aoeu256 has joined #lisp
Bike has quit [Quit: Lost terminal]
DeadTrickster__ has joined #lisp
Oladon has joined #lisp
sjl has quit [Ping timeout: 255 seconds]
DeadTrickster_ has quit [Ping timeout: 240 seconds]
pierpa has quit [Quit: Page closed]
Oladon has quit [Read error: Connection reset by peer]
Oladon has joined #lisp
fikka has joined #lisp
<rk[ghost]>
OK, i am getting somewhere :D
raynold has joined #lisp
<rk[ghost]>
finally got it to spit out the location of the file, however i see now that it deletes the file upon the completion of the request
<rk[ghost]>
just need to resolve moving the file before this autodelete:)
fikka has quit [Ping timeout: 248 seconds]
rumbler31 has joined #lisp
damke_ has joined #lisp
Oladon has quit [Read error: Connection reset by peer]
damke has quit [Ping timeout: 240 seconds]
Oladon has joined #lisp
nonlinear has joined #lisp
sz0 has quit [Quit: Connection closed for inactivity]
jstoddard has quit [Quit: ERC (IRC client for Emacs 24.5.1)]
<rk[ghost]>
err, how to convert a #P object? in to a string?
<beach>
clhs namestring
<beach>
No bots?
<beach>
Oh well.
pjb has joined #lisp
<rk[ghost]>
resolved it using uiop, thanks anyhoot beach !
<rk[ghost]>
also.. didn't realize i could just type #P"adsf"
<rk[ghost]>
-.-
damke has joined #lisp
damke_ has quit [Ping timeout: 240 seconds]
bjorkintosh has quit [Quit: Leaving]
neoncontrails has quit [Read error: Connection reset by peer]
nsrahmad has joined #lisp
threh has quit [Ping timeout: 250 seconds]
eSVG has quit [Ping timeout: 258 seconds]
bjorkintosh has joined #lisp
wheelsucker has joined #lisp
aoeu256 has quit [Ping timeout: 260 seconds]
pjb has quit [Ping timeout: 240 seconds]
nsrahmad has quit [Ping timeout: 258 seconds]
neoncontrails has joined #lisp
pjb has joined #lisp
<paule32>
hello
<paule32>
how cam i ql:asdf ?
<paule32>
i have download new version
Devon has quit [Ping timeout: 258 seconds]
vancan1ty has quit [Ping timeout: 248 seconds]
Devon has joined #lisp
<Devon>
(load "~/quicklisp/setup.lisp")
eSVG has joined #lisp
<Devon>
Wednesday when #lisp got spammed by someone's paste buffer gone mad, the following lines appeared:
<Devon>
13:44 *** specbot QUIT K-Lined
<Devon>
13:44 *** easye QUIT Killed (Sigyn (Spam is off topic on freenode.))
<Devon>
13:44 *** minion QUIT K-Lined
<Devon>
Who can un-K-Line our bots?
wheelsucker has quit [Ping timeout: 240 seconds]
dddddd has quit [Remote host closed the connection]
Kaisyu has joined #lisp
mson has quit [Quit: Connection closed for inactivity]
fikka has joined #lisp
mson has joined #lisp
osvimer has joined #lisp
fikka has quit [Ping timeout: 248 seconds]
pjb has quit [Ping timeout: 250 seconds]
ryan_vw has quit [Ping timeout: 240 seconds]
ryan_vw has joined #lisp
eSVG has quit [Ping timeout: 255 seconds]
CrazyEddy has quit [Ping timeout: 260 seconds]
CrazyEddy has joined #lisp
cromachina has quit [Read error: Connection reset by peer]
LocaMocha has joined #lisp
eSVG has joined #lisp
cromachina has joined #lisp
Arcaelyx has quit [Ping timeout: 248 seconds]
milanj has joined #lisp
shka has joined #lisp
itsmemoria has joined #lisp
mishoo__ has joined #lisp
oleo has quit [Quit: Leaving]
knobo has quit [Ping timeout: 248 seconds]
Karl_Dscc has joined #lisp
Xal has quit [Ping timeout: 248 seconds]
alpert has joined #lisp
Xal has joined #lisp
mishoo__ has quit [Ping timeout: 268 seconds]
alexmlw has joined #lisp
thebardian has quit [Remote host closed the connection]
thebardian has joined #lisp
<Shinmera>
A freenode admin, I expect. Coleen can do clhs and memos in the meantime.
<Shinmera>
::notify Shinmera it's too early to think
<Colleen>
Are you feeling lonely?
<Shinmera>
I am so lonely
alexmlw has quit [Quit: alexmlw]
lisp_guest has quit [Ping timeout: 250 seconds]
damke_ has joined #lisp
vlatkoB has joined #lisp
damke has quit [Ping timeout: 240 seconds]
dec0n has joined #lisp
Karl_Dscc has quit [Remote host closed the connection]
fikka has joined #lisp
mishoo has joined #lisp
mishoo has quit [Remote host closed the connection]
sjl has joined #lisp
tfb has quit [Ping timeout: 252 seconds]
sjl has quit [Ping timeout: 268 seconds]
eschulte has quit [Ping timeout: 252 seconds]
tfb has joined #lisp
eschulte has joined #lisp
flamebeard has joined #lisp
alexmlw has joined #lisp
asarch has joined #lisp
scymtym has quit [Remote host closed the connection]
knobo has joined #lisp
asarch has quit [Quit: Leaving]
quazimodo has quit [Ping timeout: 248 seconds]
damke has joined #lisp
damke_ has quit [Ping timeout: 240 seconds]
python476 has joined #lisp
sellout has joined #lisp
shka has quit [Ping timeout: 248 seconds]
Murii has joined #lisp
<itsmemoria>
type /names and you won't be lonely anymore!
mson has quit [Quit: Connection closed for inactivity]
python476 has quit [Ping timeout: 248 seconds]
<jdz>
Oh man, look at all those people over there, and I'm all alone over here!
<jdz>
We need Marvin from Hitchiker's Guide to Galaxy here.
<Zhivago>
Just get a video camera and play it back with a 10 minute delay.
<Zhivago>
Then you can have conversations with yourself.
varjag has joined #lisp
<jdz>
That would mean I have to listen to that other guy complaining all the time!
<Zhivago>
You could hit him every time he does.
Cymew has joined #lisp
Cymew has quit [Remote host closed the connection]
Cymew has joined #lisp
<jdz>
Or have another video camera recording the output of the first video camera (also with a delay) and you only have to hit once and be entertained for a long time.
<Zhivago>
An inspired notion.
Cymew has quit [Read error: Connection reset by peer]
Cymew has joined #lisp
Mon_Ouie has joined #lisp
itsmemoria has quit [Quit: ERC (IRC client for Emacs 25.3.1)]
wigust has joined #lisp
Cymew has quit [Read error: Connection reset by peer]
Cymew has joined #lisp
margeas has joined #lisp
itsmemoria has joined #lisp
Cymew has quit [Remote host closed the connection]
Cymew has joined #lisp
itsmemor` has joined #lisp
itsmemoria has quit [Ping timeout: 250 seconds]
itsmemoria has joined #lisp
itsmemor` has quit [Ping timeout: 268 seconds]
BioSpider has joined #lisp
BioSpider has quit [Max SendQ exceeded]
BioSpider has joined #lisp
BioSpider has quit [Max SendQ exceeded]
Cymew has quit [Read error: Connection reset by peer]
Cymew has joined #lisp
Cymew has quit [Remote host closed the connection]
Cymew has joined #lisp
nullman has quit [Ping timeout: 248 seconds]
Cymew has quit [Client Quit]
yangby has joined #lisp
nullman has joined #lisp
milanj has quit [Quit: This computer has gone to sleep]
yangby has quit [Quit: Go out for a walk and buy a drink.]
Cymew has joined #lisp
alpert has quit [Remote host closed the connection]
ryan_vw has quit [Ping timeout: 248 seconds]
QualityAddict has quit [Remote host closed the connection]
alpert has joined #lisp
Murii has quit [Remote host closed the connection]
QualityAddict has joined #lisp
alpert has quit [Ping timeout: 255 seconds]
Cymew has quit []
lrvy has joined #lisp
lrvy has quit [Client Quit]
scymtym has joined #lisp
milanj has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
itsmemoria has quit [Quit: ERC (IRC client for Emacs 25.3.1)]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
wigust has quit [Ping timeout: 240 seconds]
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
neoncontrails has joined #lisp
neoncontrails has quit [Remote host closed the connection]
hhdave has joined #lisp
alpert has joined #lisp
alpert has quit [Remote host closed the connection]
alpert has joined #lisp
moei has quit [Read error: Connection reset by peer]
moei has joined #lisp
alpert has quit [Ping timeout: 255 seconds]
caseyowo has quit [Ping timeout: 255 seconds]
alpert has joined #lisp
zmt00 has quit [Ping timeout: 248 seconds]
sjl has joined #lisp
Tobbi has joined #lisp
eSVG has quit [Ping timeout: 240 seconds]
karswell_ has joined #lisp
karswell has quit [Ping timeout: 248 seconds]
sjl has quit [Ping timeout: 248 seconds]
Tobbi has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
zmt00 has joined #lisp
Tobbi has joined #lisp
Tobbi has quit [Client Quit]
<drdo>
So, what's the easy way to modify indentation for some forms? emacs/slime
<Shinmera>
"modify indentation"?
<Shinmera>
You mean change the rules by which slime will automatically indent?
<drdo>
sure
<Shinmera>
Have a look at the trivial-indent system.
_cosmonaut_ has joined #lisp
hydan has joined #lisp
osvimer has quit [Ping timeout: 248 seconds]
osvimer has joined #lisp
orivej has joined #lisp
alpert has quit [Remote host closed the connection]
alpert has joined #lisp
_cosmonaut_ has quit [Ping timeout: 240 seconds]
alpert has quit [Remote host closed the connection]
alpert has joined #lisp
<dmiles>
durring lisp compile if a (load "otherfile") is encountered should that other file be compiled ?
<beach>
It won't be.
<dmiles>
ok good.. but this actualy file being compiled is still expected to laod that file right?
<beach>
If it's on the top level, then the compiler will generate a call to LOAD and that call will be executed when the compiled code is loaded.
<dmiles>
ok good .. that is much easier than what i have been trying to do
<beach>
What have you been trying to do?
<dmiles>
i was concerned that the (load "file") file might contain macros that the compiled file needs... so i assumed all the side effects of the otehr file would need to be carried out
<beach>
It is highly unusual to have a call to LOAD in source code.
<beach>
You might want to consider using something else.
<beach>
There are quite a number of problems with that code.
<beach>
1. The number of semicolons is wrong for top-level comments.
<beach>
2. SETQ is used on an apparently undefined variable.
<dmiles>
(problem 1 it does what i was trying to accomidate :P)
<dmiles>
(go on)
<beach>
3. It should be using an ASDF system definition instead of explicit calls to LOAD and COMPILE-FILE.
Amplituhedron has joined #lisp
<beach>
Compiling this file won't buy you much.
<beach>
Most time will be spent in calls to LOAD or COMPILE-FILE when this code is loaded, ether as source code or as compiled code. So whether this code is compiled or not does not make any difference.
<beach>
And while you are at it, fix the number of semicolons. It should be 3 for a top-level comment.
* dmiles
fixes that in his fork
<beach>
Compiling that last file won't give you much of anything.
<dmiles>
ok good.. then i understodd what you means about the other
<beach>
The compiled code will just contain code for the SETQ and the following function calls.
<beach>
So you might as well load it as source.
<beach>
But, seriously, code should not call COMPILE-FILE nor LOAD explicitly like that.
<beach>
And, like I said, using SETQ on an undefined variable like that is undefined behavior, and a good Common Lisp system will signal an error.
<dmiles>
yeah that first transgresion tells one a lot
JenElizabeth has quit [Remote host closed the connection]
JenElizabeth has joined #lisp
<dmiles>
though this program works on clisp and a couple other systems.. and only gets compiled since someonje first invoke the compiler script called dd_compile.cl .. and then they pick up the compiled reasults durring (laod ..) the dd_get.cl script
<dmiles>
one file doesnt compile right on a certain lisp .. so i relete the fasl and then run dd_get.cl
<dmiles>
so i delete the one out of 12 fasls and then run dd_get.cl
<beach>
Write an ASDF system definition for it, PLEASE!
<dmiles>
:)
<beach>
It works on some Common Lisp systems because they define that undefined behavior as "declare the variable special" and that is a very bad idea to do.
<beach>
You can then search for simple typos for a very long time.
<beach>
"Hmm, I set this variable, but it still has no value. Mysterious!"
troydm has quit [Ping timeout: 250 seconds]
<beach>
So it is better to use a Common Lisp implementation with stricter treatment of this particular undefined behavior, namely, to signal an error so that the programmer can fix his or her typo.
m00natic has joined #lisp
python476 has joined #lisp
<dmiles>
i promise to have style warnings in my impl
osvimer has quit [Remote host closed the connection]
sjl has joined #lisp
<beach>
Not enough for this case, in my opinion.
_cosmonaut_ has joined #lisp
milanj has quit [Read error: Connection reset by peer]
python476 has quit [Ping timeout: 255 seconds]
milanj has joined #lisp
sjl has quit [Ping timeout: 248 seconds]
damke_ has joined #lisp
damke has quit [Ping timeout: 240 seconds]
hydan has left #lisp [#lisp]
hydan has joined #lisp
Tobbi has joined #lisp
angavrilov has joined #lisp
orivej_ has joined #lisp
orivej has quit [Ping timeout: 258 seconds]
attila_lendvai has joined #lisp
EvW has joined #lisp
alpert has quit [Remote host closed the connection]
<paule32>
how can i iterate lists, where the sub length is not know
jmercouris has joined #lisp
<jmercouris>
Given CLASS A, is there a way to enforce that all classes extending CLASS A implement a set of methods?
yeticry has quit [Ping timeout: 240 seconds]
<beach>
jmercouris: Define those methods so that they are specialized to A [so to speak].
<jmercouris>
beach: Can you please explain further, what does it mean when a method is specialized? When it has slots with one of the type specifiers being class A?
<Shinmera>
jmercouris: What would you want to happen if there is no method specialising on a subclass of A?
<Xach>
jmercouris: rather than slot, argument. and rather than type specifier, class name.
<beach>
Well, since methods are classes, they do have slots, but in this case, it has to do with the parameter of the method being restricted to A.
<beach>
jmercouris: (defgeneric bla (x)) (defmethod bla ((x A)) ...)
<jmercouris>
Shinmera: The program should not be able to load, to enforce that all the methods have been implemented
<beach>
jmercouris: That's a very basic question about methods and generic functions. Are you sure you should be using such things without reading up first?
<Shinmera>
How would it know when all possible methods might have been added?
<jmercouris>
Xach: Yes, sorry, that is exactly what I meant
<Shinmera>
If you define a new subclass, should it just immediately error because the methods for it don't exist?
<jmercouris>
beach: I've read already, I find I learn best by doing, making mistakes, and then trying to understand what I did
<jmercouris>
Shinmera: Yes
<Shinmera>
How would you ever be able to actually implement the methods then?
<jmercouris>
Shinmera: I thought the check could happen during something like initialize-instance :after
<Shinmera>
If you can't define the class, because it errors due to a lack of said methods, you can't add the methods, because specialising on a class in a method requires the presence of the class.
<jmercouris>
Yeah, what you say is true, during instantiation time is when it should error
nsrahmad has joined #lisp
lisp_guest has joined #lisp
<jmercouris>
Maybe I'm trying too hard to make this like java
eSVG has joined #lisp
<Shinmera>
You are.
<Shinmera>
If there is no method specialising on a class it will error when you try to call its generic function anyway.
sz0 has joined #lisp
<Shinmera>
Checking for completeness on every instantiation isn't a great idea either.
<Shinmera>
So you'd need a more involved protocol that avoids this.
<Shinmera>
It is possible to do this, I just don't see it being worth the effort.
<jmercouris>
The reason this topic keeps coming up in my head was because I was told some time ago, perhaps two weeks or something, that I should convert my "Interface" package to a CLOS object, and I want several interfaces to extend from a parent CLOS, but in order to be a valid extension, they need to implement a set of methods
<Shinmera>
Just document and trust.
<jmercouris>
Yeah, I am the only one using my internal API for now, I'll just avoid trying to force a protocol
<Shinmera>
What you can do, for your own safety, is implement a function that you can run manually to "check the integrity"
<beach>
jmercouris: An "interface" in a traditional object-oriented language often translates to a set of generic functions.
<jmercouris>
Thanks for the advice veryone
<Shinmera>
Said function would use something like compute-applicable-methods to discover whether the necessary methods are in place.
<jmercouris>
beach: But generic functions can remain unimplemented though, so I don't get that safety which is what I'm looking for
<beach>
It is safe because when you call them you get an error.
<jmercouris>
Well yes, but that would also crash my program :D
<beach>
Don't call them then.
<Shinmera>
It would signal an error, giving you a debugger, and the ability to fix the issue.
<jmercouris>
defgeneric on superclass it is for now then
<Shinmera>
When you've implemented the method you can then use the "retry call" restart and continue where you left off.
<jmercouris>
Right, will do
<jmercouris>
It's hard to "unlearn" so many years of other languages, I have to change my approach
<beach>
jmercouris: You are confusing two types of exceptional situations. One is a program defect, namely the programmer omitted to make sure some generic function can handle the kinds of objects that is given to it as an argument. Such an exceptional situation should indeed signal an error that the programmer must then deal with.
<Shinmera>
Lisp embraces the dynamism. Doing static checking is hard, because it would often make incremental approaches impossible or very annoying.
Bike has joined #lisp
GrayArea has joined #lisp
<beach>
jmercouris: The other exceptional situation is if the USER of your program does something that the program can not handle. Then there should be a friendly message and a way to continue using the program.
<beach>
jmercouris: To avoid having an error signaled when the USER is using your application, you test it before shipping it.
<jmercouris>
beach: The user can trigger a function that the program cannot handle because the programmer forgot to implement some function
<beach>
jmercouris: You test the program first. You have to anyway, to make sure those functions do the right thing.
<jmercouris>
beach: testing, what's that :P
<jmercouris>
Yeah, I'll have to do that, and I'll just have to "document and trust" with defgenerics in the superclass
<Shinmera>
It's what I don't do often enough
<beach>
jmercouris: The mere existence of a function is not enough to ship the program.
<beach>
jmercouris: Generic functions are not defined in any class.
<jmercouris>
I've at least stripped all of the foreign code and isolated it to a single interface
<jmercouris>
beach: I mean in the same file where I define my class then
TCZ has joined #lisp
<beach>
jmercouris: That's a bad idea.
<jmercouris>
Why?
<beach>
I guess it is not a bad idea. But, I think you mean something else.
<Shinmera>
Generally the point is that generic functions are more "potent" than classes.
<Shinmera>
So it's weird to think about a generic function as "belonging" to a class.
<Shinmera>
It's more useful to think about the generic function as operations, which are what you really care about, and classes as things to do these operations with.
<Shinmera>
So it is an inversion of the "java model"
<Shinmera>
I don't see an issue with saying that your operation operates on a certain hierarchy of objects, so defining the root of that alongside the generic function isn't a problem.
Mon_Ouie has quit [Quit: WeeChat 1.9.1]
<Shinmera>
It's more that the class is defined alongside the generic functions than the other way around.
EvW has quit [Ping timeout: 246 seconds]
<beach>
Right, and that would be a "protocol class".
varjag has joined #lisp
alpert has joined #lisp
<jmercouris>
Shinmera: I think I'm finally starting to understand some of the value behind CLOS
alpert has quit [Read error: Connection reset by peer]
alpert has joined #lisp
<jmercouris>
I should really only think of classes as just containers for data right?
<Shinmera>
Yes.
<jmercouris>
and the real magic, is the functions, and different functions can specialize on different data containers
norserob has quit [Remote host closed the connection]
<pjb>
paule32: you should be careful with your types!
<Shinmera>
The general example that illustrates this point is if you have a (draw thing canvas) function. This operation depends just as much on what is drawn, as well as where it is drawn to. It makes no sense to try and attribute it to either one of the arguments.
<pjb>
paule32: even if types are associated with values, and not with variables, and even if T is the super type of all types, unless you have a specific reason to do horrors such as initializing a *menu* to an integer such as 0, you should avoid it!
<pjb>
paule32: if a menu is a list, then initialize it as a list!
<pjb>
paule32: (defparameter *menu* '())
<jmercouris>
Shinmera: Aha, yes, that does make a lot of sense, depending on the type of canvas object, the operations could be radically different, so you want to be able to specialize on multiple objects for a given function
<Shinmera>
Exactly.
<pjb>
paule32: also, in general you will want defparameter rather than defvar, since defvar assigns the value only if the variable is not already bound.
<jmercouris>
Thank you for the explanations, I'll need to absorb and internalize this information for a little bit, but I think I am getting there
<pjb>
paule32: you can iterate on lists with dolist, loop for x in list, map, mapc, mapcar, mapcan, mapl, maplist, mapcon, do, do*, etc.
<pjb>
paule32: so read in the Hyperspec about those operators, and then choose one of them to iterate in your menu list.
<pjb>
There's a reason why Smalltalk is the way it is: it was first implemented in Lisp!
igemnace has quit [Quit: WeeChat 1.9.1]
<pjb>
jmercouris: also, have a look at definterface/defimplementation in slime/swank.
<larsen>
pjb: I think the very first implementation was in Basic (first experiment by Dan Ingalls)
<pjb>
I thought it was Alan Kay. I'd have to study more precisely Smalltalk history.
<pjb>
jmercouris: currently, beach is right that you should test to detect such errors. However, you could perform a global analysis of your sources to check at "compilation" time whether all the required methods are implemented. You would probably need additionnal annotations (eg. in form of declarations).
<larsen>
yes, Dan Ingalls was in Kay's lab. He wrote the implementation of Kay's design
<pjb>
jmercouris: you can easily come with algorithms to perform specific global checks such as this one.
adrien91 has joined #lisp
adrien91 has quit [Client Quit]
<pjb>
jmercouris: the worst difficulty is actually reading the source of a lisp program. It's easy if you load it in the current image and perform introspection. But you can only validate it for the current implementation with the current set of *features* etc. Sometimes you would want to read it without modifying the current image, and analyse also the read-time variants. For this you can use something like my lisp reader, providin
<pjb>
own reader macros. But it's for really sophisticated cases.
<pjb>
(You still need to read yourself the sources, to process it, notably take note of the declarations, since there's no conforming API to get the declarations for a given form).
<pjb>
s/form/lisp object/
jameser has joined #lisp
<jmercouris>
pjb: A very interesting snippet there
<jmercouris>
pjb: Sounds like a rabbit hole I don't want to go down just yet, or perhaps ever :D
turkja has quit [Ping timeout: 248 seconds]
<jmercouris>
pjb: At any rate, thank you for the advice
turkja has joined #lisp
damke has joined #lisp
damke_ has quit [Ping timeout: 240 seconds]
orivej has joined #lisp
mson has joined #lisp
Josh_2 has joined #lisp
keep_learning has quit [K-Lined]
wigust has joined #lisp
jasom has quit [Ping timeout: 240 seconds]
oleo has joined #lisp
DeadTrickster_ has joined #lisp
damke has quit [Ping timeout: 240 seconds]
DeadTrickster__ has quit [Ping timeout: 248 seconds]
jasom has joined #lisp
damke has joined #lisp
knobo has quit [Ping timeout: 268 seconds]
knobo has joined #lisp
yaewa has joined #lisp
moei has quit [Ping timeout: 255 seconds]
Denommus has joined #lisp
wheelsucker has joined #lisp
cromachina has quit [Read error: Connection reset by peer]
damke has quit [Ping timeout: 240 seconds]
TCZ has quit [Quit: Leaving]
jameser_ has joined #lisp
damke has joined #lisp
jameser has quit [Ping timeout: 248 seconds]
hexfive has joined #lisp
quazimodo has joined #lisp
damke_ has joined #lisp
LiamH has joined #lisp
damke has quit [Ping timeout: 240 seconds]
wigust has quit [Remote host closed the connection]
python476 has quit [Ping timeout: 240 seconds]
milanj has joined #lisp
sjl has joined #lisp
knobo has quit [Ping timeout: 248 seconds]
wigust has joined #lisp
turkja has quit [Ping timeout: 248 seconds]
_rumbler31 has joined #lisp
jameser_ has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
nsrahmad has quit [Ping timeout: 240 seconds]
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #lisp
DeadTrickster__ has joined #lisp
sjl has quit [Read error: Connection reset by peer]
sjl has joined #lisp
DeadTrickster_ has quit [Ping timeout: 240 seconds]
Josh_2 has quit [Remote host closed the connection]
turkja has joined #lisp
hydan has quit [Ping timeout: 260 seconds]
emaczen` has joined #lisp
emaczen has quit [Ping timeout: 264 seconds]
turkja has quit [Ping timeout: 240 seconds]
turkja has joined #lisp
hexfive has quit [Ping timeout: 240 seconds]
lnostdal has quit [Read error: Connection reset by peer]
_whitelogger has joined #lisp
zooey has quit [Ping timeout: 248 seconds]
whoman has joined #lisp
josh5tone has joined #lisp
pillton has quit [Ping timeout: 248 seconds]
murii has joined #lisp
zooey has joined #lisp
flamebeard has quit [Quit: Leaving]
hexfive has joined #lisp
specbot has joined #lisp
caseyowo has joined #lisp
minion has joined #lisp
<beach>
minion: Welcome back!
<minion>
thanks!
dec0n has quit [Read error: Connection reset by peer]
jstoddard has joined #lisp
eSVG has quit [Ping timeout: 240 seconds]
eudoxia has joined #lisp
yaewa has quit [Quit: Leaving...]
moei has joined #lisp
cess11_ is now known as cess11
FreeBirdLjj has quit [Remote host closed the connection]
knobo has joined #lisp
murii has quit [Quit: ¯\_(ツ)_/¯]
cess11 has quit [Quit: leaving]
cess11 has joined #lisp
Xal has quit [Ping timeout: 240 seconds]
Xal has joined #lisp
fikka has quit [Ping timeout: 255 seconds]
thinkpad has quit [Ping timeout: 248 seconds]
Josh_2 has joined #lisp
FreeBirdLjj has joined #lisp
hexfive has quit [Ping timeout: 250 seconds]
mathrick has quit [Ping timeout: 248 seconds]
alexmlw has joined #lisp
murii has joined #lisp
caseyowo has quit [Ping timeout: 248 seconds]
Khisanth has quit [Ping timeout: 268 seconds]
bigos has joined #lisp
zooey has quit [Ping timeout: 248 seconds]
FreeBirdLjj has quit [Remote host closed the connection]
fikka has joined #lisp
lisp_guest has quit [Ping timeout: 268 seconds]
GrayArea has quit [Read error: Connection reset by peer]
Jesin has joined #lisp
hexfive has joined #lisp
zooey has joined #lisp
mathrick has joined #lisp
fikka has quit [Ping timeout: 260 seconds]
mathrick has quit [Ping timeout: 240 seconds]
fikka has joined #lisp
knobo has quit [Ping timeout: 240 seconds]
FreeBirdLjj has joined #lisp
EvW has quit [Ping timeout: 255 seconds]
fikka has quit [Ping timeout: 248 seconds]
megha213 has quit [Quit: Leaving]
damke_ has quit [Ping timeout: 240 seconds]
damke_ has joined #lisp
wooden has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
scymtym has joined #lisp
Khisanth has joined #lisp
Tristam has quit [Read error: Connection timed out]
murii has quit [Ping timeout: 260 seconds]
_cosmonaut_1 has joined #lisp
damke has joined #lisp
jstoddard has quit [Ping timeout: 268 seconds]
damke_ has quit [Ping timeout: 240 seconds]
_cosmonaut_ has quit [Ping timeout: 240 seconds]
mathrick has joined #lisp
fikka has joined #lisp
python476 has joined #lisp
python47` has joined #lisp
shka has joined #lisp
_cosmonaut_1 has quit [Ping timeout: 260 seconds]
jstoddard has joined #lisp
python476 has quit [Ping timeout: 248 seconds]
fikka has quit [Ping timeout: 250 seconds]
fikka has joined #lisp
sjl__ has joined #lisp
Karl_Dscc has joined #lisp
sjl has quit [Ping timeout: 240 seconds]
emaczen` has quit [Remote host closed the connection]
terpri has quit [Ping timeout: 240 seconds]
alexmlw has quit [Ping timeout: 255 seconds]
damke has quit [Ping timeout: 240 seconds]
damke__ has joined #lisp
bigos has quit [Quit: Leaving]
hhdave has quit [Ping timeout: 248 seconds]
turkja has quit [Ping timeout: 268 seconds]
<Josh_2>
Finallyyyyyyy fixed my Jaro Winkler distance
emaczen has joined #lisp
<Josh_2>
maybe not.
Xal has quit [Ping timeout: 258 seconds]
m00natic has quit [Remote host closed the connection]
murii has joined #lisp
Xal has joined #lisp
kozy has quit [Quit: No Ping reply in 180 seconds.]
python47` has quit [Quit: ERC (IRC client for Emacs 25.3.1)]
python476 has joined #lisp
quazimodo has quit [Ping timeout: 240 seconds]
attila_lendvai has quit [Quit: Leaving.]
kozy has joined #lisp
turkja has joined #lisp
fortitude has joined #lisp
Kaisyu has quit [Quit: Connection closed for inactivity]
sz0 has quit [Quit: Connection closed for inactivity]
GrayArea has joined #lisp
bjorkintosh has quit [Remote host closed the connection]
bjorkintosh has joined #lisp
varjag has joined #lisp
caseyowo has joined #lisp
thebardian has quit [Remote host closed the connection]
alpert has quit [Remote host closed the connection]
alpert has joined #lisp
ym has quit [Remote host closed the connection]
alpert has quit [Ping timeout: 240 seconds]
mishoo has joined #lisp
ym has joined #lisp
Karl_Dscc has quit [Remote host closed the connection]
angavrilov has quit [Remote host closed the connection]
narendraj9 has quit [Remote host closed the connection]
f0ff has joined #lisp
<otwieracz>
czym się do tego podłączyć?
nullniverse has joined #lisp
<phoe>
otwieracz: podłącz się na #lisp-pl może
<otwieracz>
damn
<otwieracz>
not here
rk[ghost] has left #lisp [#lisp]
raynold has joined #lisp
<raynold>
ahh it's a wonderful day
easye has joined #lisp
damke has joined #lisp
<shka>
hello
damke__ has quit [Ping timeout: 240 seconds]
Trasformatore has quit [Ping timeout: 240 seconds]
damke_ has joined #lisp
angelo_ has joined #lisp
damke has quit [Ping timeout: 240 seconds]
rippa has joined #lisp
turkja has quit [Ping timeout: 240 seconds]
damke has joined #lisp
damke_ has quit [Ping timeout: 240 seconds]
whartung has quit [Quit: whartung]
nullniverse has quit [Ping timeout: 240 seconds]
whartung has joined #lisp
terpri has joined #lisp
LocaMocha has quit [Ping timeout: 268 seconds]
EvW has quit [Ping timeout: 255 seconds]
Oladon has quit [Read error: Connection reset by peer]
Oladon has joined #lisp
jstoddard has quit [Ping timeout: 248 seconds]
<Josh_2>
When working with a large array is it better to destructively sort it or just change the array variable to a returned sorted array (the functional way)
jasom has quit [Ping timeout: 240 seconds]
alpert has joined #lisp
<Josh_2>
the array will probably be around 1000 elements long
jasom has joined #lisp
<shka>
Josh_2: depends
<Josh_2>
Well I am going to run a list of words through a fuzzy string matcher, record the result and extract the highest answers from a large sorted array
<Josh_2>
I have a lot of words
bjorkintosh has quit [Ping timeout: 250 seconds]
bjorkintosh has joined #lisp
<shka>
and then what
<shka>
anyway, it depends on the bigger picture
fikka has quit [Ping timeout: 255 seconds]
lisp_guest has joined #lisp
<sjl__>
Josh_2: how are you sorting the array?
sjl__ is now known as sjl
wigust has quit [Remote host closed the connection]
<sjl>
CL's built-in SORT function is destructive
fikka has joined #lisp
<Josh_2>
I'm using my own quicksort implementation because this is coursework and I have to use 2 algorithms
<Josh_2>
So I'm doing a sort of spell check thing
<sjl>
ah
<Josh_2>
My prof is a baller and let me us CL :D
<sjl>
the rule of "is X better than Y" is almost always "until you profile with real-world data, who knows"
<Josh_2>
well I'll make two versions of quicksort so I can pass it as an argument
<sjl>
something that could be interesting is writing a function to just extract the largest N elements from a sequence
<sjl>
instead of sorting the entire thing
wigust has joined #lisp
<Josh_2>
...
k-stz has joined #lisp
aoeu256 has joined #lisp
<Josh_2>
That's a better idea, however I have to use two algorithms that I implement myself, so that's the reason for sorting
<sjl>
like alexandria's EXTREMA, but with support for returning N elements instead of just 1
<sjl>
sure
<sjl>
sorting works too
thebardian has quit [Remote host closed the connection]
<Josh_2>
That is a way better idea, and i'll write that in a comment
vlatkoB has quit [Remote host closed the connection]
<sjl>
but if it's for a class and you've already got a sorting algo written, might not be worth redoing it
<Josh_2>
I don't have it written yet I was just starting it and now I'm eating dinner
<sjl>
ah
<Josh_2>
I think I'll stick with quicksort, as I would have to ask my prof
neoncontrails has joined #lisp
EvW has joined #lisp
fikka has quit [Ping timeout: 248 seconds]
knobo has joined #lisp
shenghi has quit [Remote host closed the connection]
shenghi has joined #lisp
yrdz has quit [Ping timeout: 248 seconds]
dyelar has joined #lisp
<k-stz>
Hey, I'm trying to read out from process memory. But when I feed some high address into it like: (file-position *process-mem-file* #xffffffffff601000). I get an error that it only accepts (signed-byte 64), but I need (unsigned byte 64). (sbcl, on a linux)
<Josh_2>
Is there a way to make arrays and dynamically assign the array name? or something?
arbv has joined #lisp
<Josh_2>
I have a list of words and I want a an array for every length of word which contains only words of that length, but I don't want to write (let <55 arrays etc>)
Bike has quit [Ping timeout: 260 seconds]
pillton has joined #lisp
<Josh_2>
I think I figured out how to do it with a macro, but I can't get the macro to work
klltkr has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
LiamH has quit [Quit: Leaving.]
<pillton>
chls let
<pjb>
Josh_2: arrays don't have names. There's no array-name function!
<pjb>
Josh_2: if you have 55 arrays, then a good idea is to put them in a vector (make-array 55 :initial-contents (list array1 array2 … array55))
Karl_Dscc has quit [Remote host closed the connection]
<Josh_2>
But depending on an external variable I could have 5 or 50 arrays
<jaccarmac>
Use that variable in your (make-array ...) then
<pjb>
Josh_2: or of course; (map-into (make-array 55) (lambda () (make-array 0 :adjustable t :fill-pointer t)))
<pjb>
Josh_2: you're a big boy, if you have 55 in a variable, you'll know what to do!
<Josh_2>
*bangs head*
<TCZ>
738e12bc-ac03-4f7c-b25c-e672fb25333d
<Josh_2>
I've never used map-into before, but it is exactly what I need
<Josh_2>
Ty pjb
lnostdal has joined #lisp
<aeth>
What's the most efficient way to go over a list that might be dotted list and then de-dot it?
Bike has joined #lisp
<pjb>
perhap loop on
<pjb>
depends on what efficiency you want.
<aeth>
I can't use dolist or loop for foo in list or the other things because they'll error at the last element
<pjb>
Yes, this is why I said loop on.
<pjb>
not loop in.
<aeth>
What I want is I want to take a list, and if it's a dotted list at the last element, turn that last element into `(&rest ,element) and otherwise just leave the list unchanged (probably copying the whole thing every time, I guess). i.e. turning a Scheme lambda list into a CL lambda list. e.g. (x y . z) => (x y &rest z)
<aeth>
There's also a case where it's not a list at all, in which case it'd just become (&rest z) but that's trivial
<Xach>
aeth: just curious, how did this problem arrive at your doorstep?
<pjb>
(loop for (x . rest) on '(1 2 3 . 4) if (null rest) then do (loop-finish) else if (atom rest) then do (process x) (process rest) (loop-finish) else do (process x))
<aeth>
Xach: I'm writing a Scheme in CL taking as many shortcuts as possible. It's a problem I come back to from time to time. The biggest shortcut of all is to implement a Scheme lambda as a CL lambda with a continuation parameter at the front and run it in continuation-passing-style with a trampoline that ensures tail recursion.
<Xach>
aeth: ok. i ask because destructuring-bind, for example, accepts dotted lists for destrucutring
<Xach>
but that may not work for your purposes
<pjb>
aeth: of course, you can just use (com.informatimago.common-lisp.cesarum.list:list-elements '(1 2 3 . 4)) #| --> (1 2 3 4) ; 3 ; nil |#
<aeth>
I can define Scheme procedures in terms of foreign CL functions through a macro that emulates Scheme's define syntax, e.g. (define-scheme-procedure (+ &rest numbers) (apply #'+ numbers)) but to make that fully consistent it should use a Scheme lambda list, e.g. (define-scheme-procedure (+ . numbers) (apply #'+ numbers))
<aeth>
So maybe destructuring-bind can work!
fikka has quit [Ping timeout: 248 seconds]
<aeth>
And I handle the nil vs. (#f and '()) issue by having two macros, define-scheme-procedure and define-scheme-predicate, where the latter replaces nil with :false (which might have to be something else if I add keyword support to the Scheme)
<aeth>
This way, the Scheme can use any CL code as a Scheme procedure as long as someone writes a trivial wrapper macro for it. (And the other way around would work even easier since the Scheme procedures are just CL lambdas with a continuation parameter and guaranteed TCO)
<Xach>
aeth: have you looked at others CL-hosted schemes?
<pjb>
like pseudo-scheme, a r4rs?
<aeth>
Xach: I have looked at Pseudoscheme, but it takes shortcuts that are legal for r4rs that aren't legal for r7rs (the languages have diverged more) and it doesn't fully implement r4rs because it's not about accuracy of implementation
mson has joined #lisp
<aeth>
(hence the "pseudo")
damke has joined #lisp
<Xach>
ahh
<Xach>
i still wish i could get pseudoscheme going
_rumbler31 has quit [Ping timeout: 250 seconds]
<Josh_2>
Am pretty happy I got this working thanks so much pjb :D
<aeth>
Iirc (it's been a while since I read the source), I think Pseudoscheme just uses the CL reader, which will have two issues. It'll permit things that are legal in CL but not legal in Scheme, and it won't read things that are legal in Scheme but are not legal in CL. The latter is the larger problem, and it only gets worse with each rnrs.
damke_ has quit [Ping timeout: 240 seconds]
fikka has joined #lisp
k-stz has quit [Remote host closed the connection]
<aeth>
There are actually subtle edge cases even in the s-expression representation themselves, e.g. Scheme treats '(. x) as legal and reads it as x
<aeth>
That probably simplifies their lambda list representation, which seems odd from a CL perspective
thinkpad has joined #lisp
jaccarmac has quit [Quit: ERC (IRC client for Emacs 27.0.50)]
<aeth>
Their lambda list permits (. x) <=> x, which is CL's (&rest x)
fikka has quit [Ping timeout: 248 seconds]
<aeth>
In CL, the (. x) isn't a legal s-expression and x isn't a legal lambda list.
orivej has joined #lisp
karswell_ has quit [Read error: Connection reset by peer]
* Xach
recalls the criticism that scheme syntax is defined on character syntax rather than objects
Denommus has quit [Ping timeout: 264 seconds]
damke_ has joined #lisp
damke has quit [Ping timeout: 240 seconds]
EvW has quit [Ping timeout: 248 seconds]
SaganMan has joined #lisp
<pjb>
aeth: obviously, you need to have your own scheme reader macros, or even a whole reader.
fikka has joined #lisp
fikka has quit [Ping timeout: 250 seconds]
<aeth>
pjb: Well, not really a whole reader, what will happen is I'll read enough to see if I can use the CL reader, and then read it if I can, and if I can't I'll have to fall back to my own stuff.
<aeth>
And they're not mutually exclusive. Once I write a read, I can use that read in a reader macro, for inline Scheme