libera/#lisp - IRC Chatlog
Search
15:46:31
theseb
My limited understanding of "lexical scoping" is that invocations use envX when evaluating the function body?
15:51:36
theseb
It just seems weird to me for some reason today that inside a function you can't modify the normal environment
15:51:58
theseb
But I think that is what people mean when they talk about stuff happening in different "scopes"
16:41:05
White_Flame
rendar: if you do want to use more standard terminology, lisp does not use a lexer+parser, it uses a reader which does not cleanly delineate between those 2
16:41:33
TMA
theseb: it depends. when you do (setf a b) where x is a lexical binding the value associated with a in envX is changed; if the binding is dynamic (called special in Common Lisp parlance) the value in envY is changed; it is conventional to name the variables whose bindings are special with earmufs: *name*
16:41:46
rendar
White_Flame, i see, problem is that i have already written a lot of code, and i have a Lexer and Parser classes.. hard to revert back
16:43:16
rendar
White_Flame, for now, i have the Lexer yielding (with python generators) Tokens, the parsers reads these tokens and yields Form classes, the Interpreter will eval these forms, and the REPL will print Interpreter form's eval results
16:44:37
rendar
now i'm fixing the problem that the lexer/parser can get incomplete code, e.g. getting first "(+ 2" and then "3)"
16:47:55
White_Flame
the reader only performs parsing which is purely syntactic; the evaluator performs parsing which involves semantic location of code
16:48:38
White_Flame
also, if the reader (which uses a string), gets "(+ 2" and end-of-stream, it is an error
17:19:29
rendar
White_Flame, yep, for now the lexer generates tokens, and the parser with those tokens generates form, which are python tuples, e.g. `(Symbol("+"), 2 3)`
17:20:28
rendar
i have FormExpression which is something with ( ), or FormAtom which is just an atom generated from the parser
17:24:01
rendar
i had to make distinction between (+, 2, 3) tuple or 4, "hello", 12.89, because in the first case you have something that will run a function
17:26:46
White_Flame
the lisp implementation does not have lists, though. It only has cons cells, and list utilities for one particular usage of them
17:27:10
White_Flame
I think by reifying lists/tuples, you're going to have a hard time dealing with ohter uses of cons cells
17:28:09
aeth
and it's 3.5 because '(3 . 4) is only half of what you want, which is '(3 . (4 . NIL))
17:46:34
capjamesg
Hello everyone! I have been playing around with Lisp for the last few weeks in my spare time. I wondered if someone could help me understand if I have implemented a short function correctly.
17:46:58
capjamesg
I'm very much in the "figuring out how to do something" stage so my code might not be elegant :D
17:51:33
pjb
rotatef is a mutator: it modifies the places. Therefore the places must not be in an immutable structure, such as a literal (quoted) list! So we need to build a fresh, mutable list with the LIST operator.
17:54:01
pjb
capjamesg: note: since you name the parameter arr you expect perhaps an array. Actually an 1-d array, ie. a vector. So instead of building a list with LIST, you may want to build a vector with VECTOR, and use ELT instead of NTH (beware of the arguments order which differs). ELT works both on lists and on vectors.
17:55:12
pjb
capjamesg: with range, you are creating a useless temporary list. THis is a lot of work, you need to allocate memory for it, store the indexes, then you need to walk the list and read the indices, and when it's finished, you need to garbage collect it. Instead, you can just compute the indices with for i below 10, etc.
17:59:15
pjb
capjamesg: vectors of course have O(1) access times, so when passing a vector, the complexity of fisher-yates will be O(length(vector)); On the other hand, when passed a list, it will be O(length(list)²) since elt or nth will be themselves O(length(list)).
18:07:33
capjamesg
Are there any good guides on algorithmic complexity specifically in Lisp (I'm using Common Lisp)?
18:08:37
pjb
there's not a lot of lisp specific algorithm and data structure books. But there is: https://www.amazon.fr/Programming-Algorithms-Lisp-Efficient-Programs/dp/1484264274
18:09:08
pjb
more at http://cliki.net/Getting+Started http://cliki.net/Online+Tutorial http://cliki.net/Lisp+Books
18:14:25
capjamesg
Does "with" let you declare a variable that is only available in the context of the loop in which it is declared?
18:15:19
capjamesg
I have done most of my coding in Python and a bit of Perl. I'm trying to open my mind to functional programming.
18:28:50
capjamesg
I played around a bit and ended up with this: https://termbin.com/4x4qm The main function is pretty much what you provided pjb but I learned some interesting things about lists and vectors. I didn't know about vectors + elt. Thanks again!
18:30:17
pjb
capjamesg: you can use (loop for element across vector …) instead of converting the vector into a list.
18:30:46
pjb
capjamesg: also, you may use a HOF (high order function): (map nil 'print (fisher-yates playlist))
18:56:22
neirac
dbotton how do I load an existing clog project into clog-builder? I start clog-builder it shows the www root is the correct one but I don't see the page I was working out when saved, I just see aa new panel
19:41:41
neirac
dbotton I tried to use a dropdown object using clog-builder but I don't seem to find where to add values to create the dropdown list
19:57:37
ultrasunlit
I heard a story once, long ago, and I can't remember where or by whom, that the soviets invested significant resources into Lisp software. Is this true?
20:09:18
ultrasunlit
anyway I'm not sure where I read that anymore, maybe I saw one too many russian-looking last names on source code
20:12:00
edgar-rft
maybe you meant the russian "Local Initiatives Support Program" (LISP) -> https://www.worldbank.org/en/news/video/2016/07/26/russia-local-initiatives-support-program
20:22:30
ultrasunlit
hmm no it wasn't that, I'm not sure what it was anymore. maybe it was just a dream.
20:46:35
dbotton
neirac - the easiest way is in the dropdown's on-create in the builder (or any place in straight clog code) use add-select-option or add-select-options
20:49:03
dbotton
you can drag them on to the drop down, use the shift key to drop the item (the drop down has to be selected before dropping)
20:50:23
dbotton
the builder is made up of a number of panels (made using the builder itself) and you can open those to see how I did things also
20:51:22
dbotton
neirac once I am done with the WebGL bindings for CLOG (next week) I will likely do a stint of more docs for builder
20:54:07
neirac
dbotton that worked!, I prefer using the builder to create things is just easier to see how things!, thanks for the documentation is great but some things are not clear on how to do them on the builder, well I'm learning html that could be a problem also
20:55:07
dbotton
html helps but not really needed per se. if you can keep a list of things that you hit and are not obvious and if can send to be I'll be in your debt :)
20:55:33
dbotton
It is extremely important to me that the Builder gets to a point that anyone can figure out and use
21:01:21
neirac
dbotton I'm advancing faster on clog that with other technologies, I'm replicating a small project I did a while ago on clog to get a feeling and learn. One thing I don't know is how to deploy the result?
21:04:10
dbotton
pjb for that mostly look and feel - something that is more common sense, a way to pin controls, a font picker etc. Will still offer the full list of css/html properties for advance use.
21:07:08
dbotton
A few people are working on them. One person readying his app for the Apple store now
21:19:56
dbotton
I should work on that and replace my run_builder script that lets you run the builder with no emacs or other editor/slime repl
21:41:08
jcowan
find has the problem that if you are looking for nil (or #f in scheme) the answer doesn't mean much. Member doesn't have that problem because it returns a list.
21:54:45
aeth
(defmacro python[] (&rest items) `(make-array ,(length items) :initial-contents ',items :adjustable t))
21:56:43
aeth
(next, you can use a reader macro to turn #[1 2 3] into (python[] 1 2 3) and a parser to turn [1, 2, 3] into #[1 2 3] and the rest of Python is left as an exercise to the reader)
3:18:13
bl0rt
working on a little dummy project to learn lisp, I generated a project using make-project and added a dependency to the depends-on section there and also added an import-from line in defpackage at the top, will I still have to run ql:quickload on the dependencies every time I open a new repl, or is there a step I'm missing?
3:18:38
bl0rt
or should I put the quickload statements at the top of the file in main.lisp? I'm not clear on whether those should ever exist in an actual project file
3:24:59
White_Flame
when you quickload your project, it should auto-load all the dependencies, using only the .asd file
3:25:33
White_Flame
your .lisp files don't have to worry about finding or loading anything regarding those
3:30:28
bl0rt
ah ok, what does the quickload command for that look like? I tried running quickload on the .asd file and it didn't work, and doesn't seem to do it automatically when I connect to the repl from main.lisp
3:31:19
White_Flame
it needs to be in your path, either asdf's path or linked from/under ~/quicklisp/local-projects/
3:43:17
White_Flame
cool, you could also simply put your projects directly under local-projects, but the symlink method is nice, especially if you need to remove thigns from visibility