freenode/#lisp - IRC Chatlog
Search
22:33:56
stylewarning
Any BABEL users? I'm curious how one might write strings to a stream that get encoded per an encoding like ASCII or UTF-8 without generating intermediate data.
22:51:01
White_Flame
stylewarning: I think flexi-streams will output without creating intermediate buffers, but that doesn't mean it won't cons at all
23:17:25
White_Flame
ideally, the best performance route would be buffer-to-buffer with reused buffers, so it's not constantly consing
23:19:19
White_Flame
oh, trivial-utf-8 does have write-utf-8-bytes that takes a string and an output stream, so it's not all just buffers
0:54:06
elderK
mobile_c: Read itself converts the characters and stuff into a tree of lists and things. READ is fundamental.
0:54:22
elderK
If you're used to parsing like, things from another language like C, you will have to roll that mechanism yourself.
0:55:24
mobile_c
how can i parse something like this https://paste.pound-python.org/show/K4QGpELlMYw0VWUjbl37/ using lisp
0:56:10
elderK
mobile_c: If you'd like to learn about how the reader works, you can find out here: http://clhs.lisp.se/Body/02_.htm
0:56:34
didi
I think we are dismissing READ too quickly. It's amazing that we can do it. We should praise it more.
0:57:54
elderK
mobile_c: To parse something like that, you'll probably do a lot of stuff you're used to doing in other languages if you've parsed by hand. Or, you can learn to use one of the many parser-generator libraries available for Lisp.
0:59:10
mobile_c
as i want to parse it like a parser grammar (since technically at the moment it is very similar to one)
1:01:31
malice
With problem definition like this, I'd take a look at parser generators: https://www.cliki.net/parser%20generator
1:02:47
mobile_c
as the main problem is figuring how how to parse it like a rule definition/rule expamsion
1:03:27
elderK
mobile_c: If you want to do it by hand, you could just write a simple lexer and recursive descent parser :)
1:03:59
malice
(also note that the site could use updating; some of the entries are 404 and there are probaly a couple of new ones not listed)
1:05:34
malice
mobile_c: I'm afraid I don't understand the problem well enough to suggest an optimal solution. One of the things I do not understand is the need for Lisp parser
1:06:14
malice
then I do not understand the goal - do we want any parser, some specific parser, what representation of AST should we produce, how do we handle the errors, etc.
1:08:59
malice
although writing your own parser won't be much different from other languages, I guess.
1:12:06
aeth
keep in mind that cliki is probably 15 years old, and not as popular as random github pages like https://github.com/CodyReichert/awesome-cl these days
1:14:56
malice
mobile_c: there's also rdp generator here: http://www.informatimago.com/develop/lisp/index.html
1:33:11
aeth
I think that for a reader macro as long as it returns (turns into?) one thing you can just quote it, but I could be wrongly generalizing from read-eval.
2:48:15
antonv
a library (an ASDf system) shoudl chose a dependency (another ASDF system) based on what OS / distro it runs on
2:48:52
antonv
simply speaking, depending on OpenSSL version installed, we should choose an FFI wrapper to load
3:43:35
fiddlerwoaroof
however, if it's something like "which openssl version is installed", you might have to do a bit of work to get the features setup appropriately.
9:52:53
ogamita
elderK: to test reader macros easily, you can use read-from-string: (read-from-string "`(foo \"string\" ,x)") #| --> (list* 'foo (list* "string" (list x))) ; 18 |# be sure to escape double-quotes and backslashes!
9:55:29
ogamita
aeth: when you prefix a reader macro by a quote, this prevents what is read to be evaluated. So it should print what has been read. Unfortunately, the pretty printer, and even the printer, will often print some objects in a special way. For example: (prin1-to-string '(function foo)) #| --> "#'foo" |# instead of printing as a normal (function foo) list. You can use your own printing function to avoid this caveat, eg. (print-conses
9:55:29
ogamita
'(function foo)) #| (function . (foo . ())) --> #'foo |# ; notice how the result after --> is printed by cl:print.
10:23:22
ogamita
elderK: another trick when you are developping a reader macro is to use 'my-reader-macro instead of #'my-reader-macro in set-macro-character or set-dispatch-macro-character.
10:23:41
ogamita
elderK: with ' when you redefine the reader macro, it's taken into account immediately.