freenode/#lisp - IRC Chatlog
Search
19:06:48
thodg
and then most lispers are still ignorant (including) about synchronisation primitives
19:06:50
stacksmith
As in "I can't be bothered to look up 'intern' on chls", but look at my "working code"
19:06:53
jackdaniel
this chapter is about packages and symbols: http://www.gigamonkeys.com/book/programming-in-the-large-packages-and-symbols.html
19:06:55
jmercouris
there are many gaps in my knowledge, but it doesn't mean I'm completely ignorant
19:08:50
stacksmith
jmercouris: you may not be completely ignorant, but close. And there is nothing wrong with that. Being proud of it is another thing.
19:09:32
pjb
stacksmith: but when you edit a lisp file, you are not editing code with any expected syntax! You are editing DATA! Why should anybody suppose that (with-open-file 42) is not a valid data list to be put in a lisp file? Who knows how this file will be loaded and interpreted?
19:09:41
jackdaniel
OK, enough is enough, Im getting back to code – I think that offtopic should move to lispcafe, because it's not very productive to read backlog like that
19:09:52
pjb
You're all forgetting that lisp is a META META META META META … META PROGRAMMING language !
19:10:43
thodg
beware humans have a difficult context switch as linear programming is not friendly talk at all
19:10:58
stacksmith
pjb: who says anything about files? I am actually talking about editing lisp forms!
19:11:34
pjb
(eval '(with-open-file 42)) #| ERROR: 42 can't be destructured against the lambda list (ccl::var ccl::filename . ccl::args), because it does not contain at least 2 elements. |#
19:11:38
caffe
jmercouris: i interpret it as this: ignorance is part of the human condition. it's benign in itself. on the other hand, taking pride in it will only limit yourself. i guess i'd see it as 'well, you might be ignorant about some things' (not unusual for someone 6 months into lisp), 'but at least you don't take pride in being ignorant'
19:12:25
jmercouris
caffe: based on stacksmiths prior messages to me I read something along th elines of "you are ignorant as fuck, which is not a problem, but you are also proud of it- wow"
19:12:28
pjb
(handler-case (eval '(with-open-file 42)) (error () 'good-result)) #| --> good-result |#
19:13:13
pjb
But foremost, when you have a form in a file (or elsewhere), you don't know in advance how it will be processed, to what it will be given and to what purpose.
19:13:19
JuanDaugherty
but I hate them now and I will never participate in their community, it's not the first time it's happened and without cause
19:14:00
pjb
As a meta programming programming language, you can write interpreters and compilers trivially in lisp, so perhaps (with-open-file 42) as a perfectly good and intentional meaning. Only the human programmer can know it, not an editor!
19:14:25
stacksmith
pjb: the context of the data decides how to see it. Outside of any context, the implied lambda-list of any list is (&rest rest); inside a defun, as an operator form, with-open-file is obviously a form that needs to follow a certain structure.
19:15:57
thodg
but truly, I might sound like an old angry "blurby" C coder now, but Common Lisp does not specify even its LIST or SEQUENCE structures as data in the sense it does not provide for a possible binary serialization of it
19:16:02
pjb
See for example the file: https://gitlab.com/com-informatimago/com-informatimago/blob/master/common-lisp/html-base/html401.lisp
19:16:04
whoman
i believe it too, even if we die it is better to take the morally or ethically higher ground (selfless)
19:16:41
stacksmith
Ahem, gentlemen, please. If I start with something I know is a definition of a function in an image, I can know for certain that the forms inside follow lambda-lists as stored in the image. And if not, I can assume a generic list.
19:16:44
pjb
Notice it doesn't contain an IN-PACKAGE form (so less context; but even with a IN-PACKAGE, it would still be interpreted in an a-priori unknown context!)
19:17:07
pjb
this file is loaded actually in two different context, with different sets of defelement etc macros.
19:17:55
pjb
So the meaning of this data depends on how it's loaded. (or of course, as a human, you can infer a generalized meaning, but the lisp system doesn't know it).
19:18:08
stacksmith
pjb: Assuming that a top form has a lambda-list, all inside it just follows rules like a machine. You are talking about files, I am not.
19:18:54
pjb
You have to assume CL:LOAD or CL:COMPILE-FILE, and you have to assume some restricted setting of the *read-…* variables and of the *READTABLE* with all the reader macros!
19:19:08
stacksmith
pjb: I am, because that is a given. I am talking about an editor that edits forms, not files.
19:19:23
pjb
You have to make a lot of assumption to restrict the interpretation of the data you write, as something related to the bare lisp defined by the standard.
19:20:20
pjb
You have to expect that it will be interpreted in some context and you have to learn about this context before making any assumption.
19:21:02
stacksmith
pjb: If lisp can compile it using the lambda-lists of constituent forms, I can use these to figure out the structure.
19:21:59
pjb
Perhaps I've set it up in the asd file so that the data is loaded and processed by my own interpreter of my own language!
19:22:07
stacksmith
_death: it is no less restrictive than emacs. But it will not edit garbage or ever get lost in parentheses where it counts.
19:22:44
pjb
(defun lisp (foo) (format nil "This is ~S" foo)) #| --> lisp |# (lisp "data") #| --> "This is \"data\"" |#
19:22:50
random-nick
what if the user has a reader macro which randomly decides whenever to discard or read a form?
19:23:27
pjb
thodg: this is also a method of development commonly practized, (and definitely supported by the REPL and lisp debuggers), to write data that cannot be interpreted by the current lisp image.
19:23:47
_death
stacksmith: the way I see it, the editor should stay out of my way, not tell me what char to insert or not
19:23:59
pjb
thodg: you enter it at the REPL, and you get an error. Then you use the debugger and restarts, to define what needs to be defined, and restart the computation; repeat until it does what you want it to do!
19:24:33
pjb
see for eaxmple: https://groups.google.com/forum/#!msg/comp.lang.lisp/oGmha6PbAD4/kmpG51wjJ6gJ
19:25:26
stacksmith
pjb: _death: I think you are missing the point. It doesn't have to get in your way. But if you set out to edit a function, the editor can actually help, for instance.
19:25:29
pjb
This is also a feature of lisp that makes it so powerful: You don't need to have language elements to implement a solution. You can write the solution to your problem first, and then extend the lisp language so that it becomes able to run your solution!
19:26:18
pjb
stacksmith: it could, but not emacs. Slime tries to help by communicating between emacs and the lisp image. But it's very limited and restricted.
19:26:57
jackdaniel
having a structural editor could have other benefits - you could associate arbitrary information with the block of code without changing its textual representation ofr instance
19:27:42
stacksmith
pjb: exactly. Editing is not the same for different things. Editing Lisp code is a very specific task, and Slime is a feeble attempt to help. Paredit is a feeble attempt. There are better ways.
19:28:10
jackdaniel
or preserving older versions of the code in the structure holding the current block version
19:28:52
stacksmith
jackdaniel: thanks you! You could do things like associating comments with blocks of code, for god's sake.
19:29:12
pjb
Here is a structural editor: http://informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html
19:33:16
whoman
slime may not be required if say, emacs was written in common lisp; or if common lisp could understand the elisp.
19:34:17
whoman
true. but, when the muscle memory is trained to do paredit for example, the structure is used as the elements, rather than the characters and lines and columns
19:34:22
jackdaniel
being written in a language and having a programming support are different things. if emacs were written in common lisp it wouldn't magically gain a debugger
19:35:30
jackdaniel
whoman: there is a reason slime has sldb (and doesn't just bring implementation-specific console-based debugger) - it is better
19:37:17
aeth
thodg: Ime manual paren balancing once the ) matches a ( that's off the screen is imo too hard (although perhaps the solution is monitors in portrait mode instead of paredit... or length limits for functions)
19:37:31
whoman
didnt like it? do you move the cursor around with the arrow keys? backspace each letter of whole words? then dont worry about it.....
19:38:43
aeth
thodg: I often find that it's easier to write a gigantic mess with 120 column long lines in places and a function that can easily be 120+ lines long. As long as it's refactored later. Start with something that works, then make it beautiful.
19:39:20
whoman
if you keep a layer between you and the computer then you will always be fighting with it
19:41:04
stacksmith
CLIM, sadly renders text in such an awful way that it is not usable. And that is just the start of its ugliness.
19:42:59
thodg
that's not what i meant i have a tiling wm, so i would like emacs to not split buffers but make new windows
19:43:02
whoman
aside from WindowMaker its my favorite. i wish i knew about it when it was fresh. i wish things were always this way..
19:43:13
aeth
_death: The part that's easier to start ugly and then fix it is usually the part that would be equivalent to main() in a language with that convention.
19:44:25
whoman
C-x-2 now i've got 2 seperate X windows. those are each an emaccs window, in one emacs frame. dig ?
19:45:06
aeth
thodg: I don't really think that either works when you get to a really large program. You kind of have to do both, simultaneously, and meet in the middle
19:47:27
_death
aeth: still I find wishful thinking very useful.. reminds me how oftentimes I wrote something top-down and others jump "but there's no definition for X".. yeah, that's what I'm going to write next.. both bottom-up and top-down are useful
19:48:30
aeth
_death: On the other hand, it's very powerful to always have a working program... so a stub is probably better than undefined.
19:50:03
whoman
hmm... and future energy from maintaining two [near-] exact pieces of code in multiple places
19:50:40
whoman
got to know when to expand and fan out in complexity or pull in and compress into simplicity
20:56:08
didi
OK, this is interesting: I'm used to use 'function and #'function as synonyms (except when using FLET), until `complement' barfed at me.
20:58:09
Bike
well, you should try to use functions directly unless you have a reason not to, though
21:01:52
didi
dlowe: This is why I chose to use function designators. Makes it easier to program in an dynamic environment
21:04:09
dlowe
the clhs contradicts itself on this - the argument list says it takes only a function
21:04:15
dlowe
but the notes say (complement x) == #'(lambda (&rest arguments) (not (apply x arguments)))
21:07:16
dlowe
the X3J13 cleanup note has a joke in it http://www.lispworks.com/documentation/HyperSpec/Issues/iss172_w.htm
21:21:52
Bike
well, i mean, if a function lambda list is (foo bar) you know it takes two arguments, and you have to know that to call it.
21:22:06
pjb
Basically the only case where it's necessary, is in defstruct for boa constructors, and the only case where it's easier to use is in macros, to avoid having to parse and re-generate declarations.
21:22:21
Bike
if it's (foo bar &aux baz) then it still takes two arguments and that's still how you call it; the &aux is irrelevant to the caller.
21:22:38
pjb
On other cases, it can be admited when you hesitate between parameter and computed value…
21:26:22
Bike
(defun factorial (n &aux accum) (dotimes (i n accum) (setf accum (* (1+ i) accum)))) is a function using &aux, don't know if it's what you have in mind though
21:29:19
ig88th
Xach: is there anything I can do to help you fix the issues with quickproject on Windows?
21:33:15
Xach
ig88th: can you paste the contents of your ~/quicklisp/local-projects/system-index.txt file?
21:33:25
stacksmith
Bike: I am curious if &aux shows up in the lambda-lists stored by various implementations...
21:35:08
Bike
on sbcl if i do (defun foo (&aux x) x) and theN (describe 'foo) the lambda list with &aux comes up
21:37:00
ig88th
SBCL seems to work for creating and reading quickproject created projects, ccl not so much. I updated my question on StackOverflow: https://stackoverflow.com/questions/48675274/when-installing-quicklisp-on-windows-10-where-should-i-put-config-common-lis
21:37:57
stacksmith
Bike: it is a weird thing like :allow-other-keys argument, which is an argument but not a parameter?
21:38:18
Xach
ig88th: i know the issue with ccl. last night it seemed like something in sbcl wasn't working as it should.
21:38:49
Bike
all i'm saying is that whether or not there's &aux is irrelevant to, for example, how many arguments a function can validly receive, or the forms of those arguments
21:38:51
ig88th
yeah SBCL can create a working project using quickproject, but after I restart slime I can't load the project
21:39:11
ig88th
Xach: yeah SBCL can create a working project using quickproject, but after I restart slime I can't load the project
21:39:21
stacksmith
Bike: assuming the terminology is argument is the thing in the invocation, and parameter is the thing that describes it in the lambda-list.
21:40:29
Xach
ig88th: oh, I think I know the issue with that, too, maybe - I think it's differing line-ending conventions when running sbcl vs ccl on windows.
21:41:04
stacksmith
Bike: right, but it is in the parameter list... while :allow-other-keys is not in the parameter list but is a valid argument if &key is enabled.
21:41:54
ig88th
Xach: I know ccl can't read what it creates, and SBCL can read what it creates (for that session), but I haven't tested them against each others quickprojects if you know what I mean
21:42:12
stacksmith
Bike: anyway, it's not important. I just wanted to know if SBCL ever shows it in the lambda-lists it stores.
21:42:22
Xach
ig88th: one quick way to test is to clear out quicklisp/local-projects/ and make a new project in there with sbcl, then restart and see if it's still loadable.
21:43:46
ig88th
Xach: one thing I have noticed is that sbcl creates ~\AppData\Roaming\quicklisp\local-projects as well as ~\quicklisp\local-projects
21:46:55
Xach
that is the one to reference for this purpose. remove everything in the quicklisp/local-projects/ directory in there, including the index file.
21:50:22
ig88th
Xach: okay I deleted everything and created another ~\quicklisp\local-projects\test project and it can't be loaded by sbcl after restarting the session
21:53:34
z3t0
Is there some way to make this neater? I thought of trying (caddar) but that didn't work
21:54:48
didi
z3t0: Like, if I have a conceptual xy-point made of a cons cell, like (X . Y), I would use (point-x point) to retrieve X, and not (car point).
21:55:59
didi
z3t0: Indeed. But it is neater. Also, you could change the representation later, and not have to change every call.
22:20:23
ig88th
Xach: after deleting everything and running (quickproject:make-project "~/quicklisp/local-projects/test/" :depends-on '(vecto)) it generated a folder called test in ~\AppData\Roaming\quicklisp\local-projects but not in ~\quicklisp\local-projects
22:21:48
ig88th
Xach: ~\AppData\Roaming\quicklisp\local-projects does not have a system-index.txt, and the one in ~\quicklisp\local-projects is empty (just an empty text file)
22:25:14
ig88th
Xach: I mean that SBCl creates projects inside of ~\AppData\Roaming\quicklisp\local-projects instead of ~/quicklisp/ocal-projects\
22:25:34
ig88th
Xach: I mean that SBCl creates projects inside of ~\AppData\Roaming\quicklisp\local-projects instead of ~\quicklisp\local-projects\ (sorry, hit enter by accident)
22:26:52
Xach
ig88th: what version of sbcl are you using? (lisp-implementation-version) will tell you...
22:36:01
ig88th
Xach: the ql:add-to-init-file which adds this: https://gist.github.com/ig88th/e8c618fbae7e02ef5726456886c46215
22:38:45
dim
after a day of Python and C (and make) hacking some lisp at night feels pretty good, just saying ;-)
22:40:54
Xach
ig88th: what do you get from (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)) ?
22:48:09
Xach
ig88th: well, quicklisp is (somehow) getting loaded from C:/users/ig88t/quicklisp/setup.lisp. It would help to dig around and see how.
22:48:46
rumbler31
windows and emacs disagree about where the home directory is, i've been bitten by that before
22:48:51
Xach
Where is your .sbclrc? Is there more to it you didn't paste? Is there more than one .sbclrc? How did you get sbcl?
22:49:12
ig88th
I am using slime provided by (load (expand-file-name (concat default-directory "/quicklisp/slime-helper.el"))) from quicklisp-slime-helper
22:50:33
ig88th
Xach: my .sbclrc is located at ~\. I got sbcl through this link: https://sourceforge.net/projects/sbcl/files/sbcl/1.4.2/sbcl-1.4.2-x86-64-windows-binary.msi/download?use_mirror=svwh
22:53:24
ig88th
Xach: it also contains a file called .sbclrc that has these contents: https://gist.github.com/ig88th/1b6b058a1c05d08af04031ed4555436f
22:55:23
Xach
ig88th: quicklisp's home is in /Users/ig88t/quicklisp/ which is not what sbcl thinks of as ~/quicklisp/. So when you work with ~/quicklisp/local-projects/ in sbcl it is not the one that is known to quicklisp automagically.
22:55:48
Xach
ig88th: you would have better quickproject luck by using (quickproject:make-project "/Users/ig88t/quicklisp/local-projects/myproject/")
22:58:37
Xach
So there are some ways out of the hassle. If you stick with ccl (which is good) you could just not use quickproject until the fix is released later this month. It's not too hard to just make .asd and other files directly.
22:58:57
Xach
If you switch to sbcl it would help to move the quicklisp installation into what quicklisp thinks of as ~/quicklisp/
22:59:46
ig88th
Xach: that fix works! I can now load projects created previous to the current session
23:08:27
drmeister
Hey folks - does anyone do Javascript programming for developing interactive web based apps? I'd like to talk to someone about developing the browser side (Javascript code) to implement some new jupyter widgets that would work with our cl-jupyter kernel.
23:10:27
Shinmera
drmeister: I do, but I like to do as little of it as I possibly can, so probably not the right person for this.
23:14:02
iqubic
Shinmera: I want to work on making a neural network with perceptrons and such, but that is too advanced
23:15:14
Shinmera
Afaiu neural nets and perceptrons are well defined, so just implement the algorithms
23:15:42
Bike
yeah, perceptrons are simple. teaching them is less simple, but it's still not too bad
23:16:55
Shinmera
As with anything in neural nets, getting them to actually learn anything useful is the hard part.
23:20:47
whoman
i wonder if there is a lisp diff. but diffing the source files will reveal the precise and accurate by science differences between the two, every byte of their existence
23:21:04
iqubic
Is one of them better than the other. I notice that lispy has evil bindings via evil-lispy. I use evil, so I am more inclined to use that,
23:21:15
whoman
there is also "lisp at the speed of thought". i tried lispy and that one but, i returned to paredit because i didnt feel like learning somethuing new
23:21:44
whoman
paredit might have evil bindings, but that would be a good criteria for choosing lispy
23:22:26
Ukari
the symbol is weird, i use a temp variable in function but why the symbol could found in package
23:26:56
didi
Ukari: This is an interesting question. Lexical variables are different than global ones. There is a cool excerpt about it in PAIP.
23:27:46
Ukari
if a define a function test2 like test1, there still only one symbol "TEMP" but it don't tell any detail meaningful information
23:28:12
didi
Ukari: I don't have the necessary skills to explain it to you, unfortunately. Maybe someone else can jump in.
2:06:50
sjl
if you're an ACM member you can get a PDF of it https://dl.acm.org/citation.cfm?id=530559
2:08:55
iqubic
I don't think I want to read the book, because I don't have a good way to access the book.
2:55:33
Bike
(setf x 7) is modifying the binding of x, and that binding is created when the function is called
2:56:08
iqubic
Is see. Is there a way to make the first example actually change the value of x outside the function?
3:42:53
Bike
what operations are you doing? how sparse are the matrices? do you have guarantees on your form? what's the precision? how big are they? bla bla bla
4:06:49
iqubic
It is morning for you, night for me, but I'm not sure it can be considered good. I have been battling sickness all day.
4:15:50
iqubic
Can I overload simple functions like + to work differently if I pass in a CLOS object of my own creation?
4:17:59
Zhivago
You can always make your own version of + which is, but then you need to convince other code to use it.
4:18:37
iqubic
So most matrix libraries provide their own version of the addition function, instead of piggybacking on the existing symbol function name?
4:20:01
Zhivago
It was originally intended to allow code from lisp-system A to run on lisp-system B.
4:20:34
Zhivago
So they tried to avoid doing anything that would require hard work on the underlying implementation.
4:22:17
iqubic
yeah. I somehow assumed that CL's (+) function was a generic function that was specialized to numbers.
4:22:41
beach
iqubic: If you had bothered to look at the Common Lisp HyperSpec page for +, you would have seen that it is NOT a generic function.
4:24:24
beach
You keep forgetting location of the document defining the language you are using? Wow.
4:26:26
iqubic
beach: I'm sorry. It's just that I use the emacs lisp documentation way more often than I use CLHS.
4:34:24
stylewarning
iqubic: there’s CL-GENERIC-ARITHMETIC and LOOM, the former making arithmetic generic, the latter making almost all of CL generic
5:21:40
pjb
and assuming by quote you mean COMMON-LISP:QUOTE and by function you mean COMMON-LISP:FUNCTION
5:28:21
pjb
iqubic: first it should be noted that APPLY and FUNCALL take function designators, so if the symbol and the function designate the same function, quote and function will be equivalent in the sense that the same function will be called.
5:28:42
pjb
iqubic: and in the case of functions from the CL package, they will always designate the same function!
5:29:01
pjb
iqubic: however, for other symbols, (not from CL), they may deisgnate different functions!
5:29:33
pjb
iqubic: a symbol will always designate the global function binding, ie. the function obtained by (symbol-function symbol).
5:30:07
pjb
iqubic: however, the function special operator is the (only) closure creator operator, and it may create closures of locally bound functions.
5:30:41
pjb
iqubic: therefore: (defun foo () 'global) (mapcar 'funcall (flet ((foo () 'local)) (list (quote foo) (function foo)))) #| --> (global local) |#
5:31:24
pjb
and also: (flet ((foo () 'local)) (mapcar 'funcall (list (quote foo) (function foo)))) #| --> (global local) |#
5:31:38
pjb
In such cases, you would have to choose between quote and function depending on WHAT YOU MEAN!
5:33:31
pjb
iqubic: other characteristic properties of symbols and functions, is that since symbols, as function designators, are resolved only when used, when the function needs to be called, if the function is redefined (at run-time), then the symbol will designate the new version. While function returns the actual closure object, if the fbinding is redefined, the function object will still be the old one.
5:34:20
pjb
(let ((funs (list (quote foo) (function foo)))) (list (mapcar 'funcall funs) (setf (symbol-function 'foo) (lambda () 'redefined)) (mapcar 'funcall funs) )) #| --> ((global global) #<Anonymous Function #x30200499B92F> (redefined global)) |#
5:34:37
pjb
So again, choose between the symbol and the function, depending on the meaning you mean!
6:02:48
iqubic
Isn't there a difference between the literal value of a symbol, and the function-value?
6:05:05
beach
iqubic: Try it out at the REPL. I don't know what you mean by "literal value", so I can't try it out for you, but you must know what you mean yourself, so just type the form (EQ ? ?) and see the result.
6:08:17
emaczen`
(sb-ext:run-program "prog-name" (list "name" "--dynamic-space-size" "4096")) -- is this the correct way to pass command line arguments?
6:18:39
emaczen`
I'm printing out the dynamic-space-size from the external program and it is the default 1 GB...
6:25:37
jackdaniel
emaczen`: compare `sbcl --dynamic-space-size 4096 --eval "(print (sb-ext:dynamic-space-size))"` in the repl with `sbcl foo --dynamic-space-size 4096 --eval "(print (sb-ext:dynamic-space-size))"` (likewise)
6:26:25
jackdaniel
`sbcl --dynamic-space-size 4096 --eval "(print (sb-ext:dynamic-space-size))" program-name ` should work though
6:27:26
jackdaniel
http://www.lispworks.com/documentation/HyperSpec/Body/f_set.htm, http://www.lispworks.com/documentation/HyperSpec/Body/a_setf.htm
6:28:36
emaczen`
jackdaniel: I see... that is kinda lame, I would have never figured that out myself
6:31:53
jackdaniel
iqubic: if it is qouted in the linked example, then why not? I highly recommend reading both linked pages and if you still have questions *after that* asking them here :)
6:39:41
beach
iqubic: Do you know what the quote character means? If not, you definitely need to take a break and go read a book.
6:41:26
iqubic
('symbol) is the syntax. ' is a reader macro that expands to the function (quote symbol) which returns the symbol exactly as it is, with out evaluation
6:42:54
iqubic
It returns symbol, exactly as it is. No evaluation is done at all. ('symbol) => symbol.
6:44:29
emaczen`
I'm running (sb-ext:run-program ...) but when the external sbcl program's heap becomes exhausted I am dropped into ldb. I just want to exit from this and for my main program to continue.
6:44:45
beach
iqubic: If the reader return (quote <something>) when it sees '<something>, then what does it return when it sees ('<something>)?
6:45:47
iqubic
Or wait, I was reading the input as if it were the output. When the reader sees ('symbol) it returns ((quote symbol))
6:47:43
jackdaniel
maybe wrapping your program in handler-case and catchin heap exhausted (and exitting application) would do what you want
6:49:33
minion
iqubic: direct your attention towards pcl: pcl-book: "Practical Common Lisp", an introduction to Common Lisp by Peter Seibel, available at http://www.gigamonkeys.com/book/ and in dead-tree form from Apress (as of 11 April 2005).
6:49:34
beach
That I have figured out. What I haven't figured out is why you prefer asking trivial questions in #lisp (which is not a Common Lisp support channel) rather than reading a book.
6:51:50
beach
emaczen`: Such a condition would be hard to implement. I mean, if the heap is exhausted, how does it allocate space for the condition instance? And what would you do when it is signaled? Examine the stack? That requires form evaluation, taking up even more heap space.
6:55:56
emaczen`
jackdaniel: Yep! thanks, now I can go to bed and my program should run all night, and I don't have to be here to restart it when it drops into ldb!
7:01:26
pjb
iqubic: if the symbol designates a lexical variable, then its value will be different from (symbol-value symbol).
7:01:51
pjb
iqubic: on the other hand, if it designates a dynamic variable, then its value will be that of (symbol-value symbol).
7:02:31
pjb
(let ((foo 42)) (declare (special foo)) (list foo (and (boundp 'foo) (symbol-value 'foo)))) #| --> (42 42) |#
7:05:33
z3t0
I have some code and am wondering what is the best way to return the object at data from this function
7:05:56
z3t0
I understand that let returns the value of its final form, except the final form in this case must be closing the file