freenode/#lisp - IRC Chatlog
Search
23:00:36
emaczen
oleo: with nm -D I found a bunch of symbols of the form cvCreate but not the one I am looking for
23:07:42
pjb
emaczen: look, what I'm trying to say, is do not use the fucking C libraries! Write the library in Lisp and use a lisp library!
23:10:40
aeth
pjb: Except at some point libraries are necessary, such as OpenGL+SDL if you're doing (OS-portable) 3D.
23:17:22
emaczen
I tried ABCL with all of this and got it to work but I have a 5 second lag, I'm not sure whose fault that lag is, but I'm blaming ABCL right now which is why I am trying this
23:52:12
pierpa
the CLs times look plausible. I'm surprised only at swi being twice as fast as clisp :)
0:57:49
pierpa
dmiles: do you know about optimization declarations in CL? you are using each implementation default I guess?
0:59:32
dmiles
i recall it seting optikiaion flags.. but i dont know if they are what every impl listens to
1:03:20
dmiles
but i am not settign the optimizations and i am sure if i was making a lisp when the user enters the repl i'd make safety first
1:04:27
dmiles
the differnce between safety speed and not in 4x-8x diference for wam-cl (comparity when i add typechecking)
1:12:42
pierpa
you could try adding at top level (declaim (optimize (speed 3) (debug 0) (safety X)) ;; for X in 0..3
1:14:06
dmiles
and test with (defun fib (n)(declare (optimize speed (safety 0) (debug 0)) (fixnum n)) (if (<= (1- n) 0) n (the fixnum (+ (fib (- n 1)) (fib (- n 2)))))) (fib 38)
1:17:06
Bike
safety 0 and 3 vary too. certain things have to happen in safe code, but it's hardly a complete specification
1:17:42
pierpa
safety 3 means safe as mandated by the spec, safety 0 means as unsafe as the implementation allow
1:23:06
dmiles
ok it stayed the same with and without (as at least my cpu is not fluxuating as much as my last irc message might have made us htink)
1:31:58
dmiles
SBCL varries quite a bit and so do ccl.. i know ABCL really pays attention to these directivers but its not paying off
1:37:49
dmiles
(declaim (optimize (speed 3) (debug 0) (safety 0)))(defun fib (n)(declare (optimize speed (safety 0) (debug 0)) (fixnum n)) (if (<= (1- n) 0) n (the fixnum (+ (fib (- n 1)) (fib (- n 2)))))) (time (fib 41))
1:38:06
dmiles
(declaim (optimize (speed 0) (debug 3) (safety 3)))(defun fib (n)(declare (optimize (safety 3) (debug 0)) (fixnum n)) (if (<= (1- n) 0) n (the fixnum (+ (fib (- n 1)) (fib (- n 2)))))) (time (fib 41))
1:49:05
dmiles
its hard to know the differnce between the meaning of balls to the wall with type information vs what the anyhting else would mean
1:56:16
dmiles
and (ftype (function (fixnum) fixnum) fib) means.. but the lack of ftype and different numbers than the above.. also this sometimes only is meaningfull for compilation
3:16:48
stylewarning
I have some exciting news. We have some scientific simulation code in Lisp that beats C++, where the C++ code has non-standard Intel ISA SIMD intrinsics.
3:19:36
stylewarning
fouric I think I’ll write up a note about it, because there are some lessons to be learned
3:19:45
asarch
It says I need to load the library (asdf:load-system ’clim-examples) (clim-demo:demodemo) in order to run the examples
3:20:40
stylewarning
To cut to the chase: if you’re just going to write loops, you’re not going to beat C, but what you might be able to do is take advantage of the fact that many C codes are more dynamic than many think
3:20:47
beach
asarch: It probably doesn't matter much what implementation you use. SBCL generates better code though.
3:21:28
beach
asarch: But SBCL is not an "interpreter". We call it an "implementation". SBCL compiles each interaction form to native code before executing it.
3:22:01
fouric
stylewarning: i have a school-friend who is performance-obsessed and insists that efficiency is the most important thing in any programming language or system
3:22:35
stylewarning
fouric, unfortunately it’s closed source, but in any event, it’s also full of complex quantum mechanical calculations
3:23:48
beach
asarch: It looks like ASDF is not bundled with CLISP. It is with almost every other implementation.
3:24:29
beach
asarch: McCLIM uses a lot of generic functions. I am not so sure about the performance of CLISP on a program that heavy on generic dispatch.
3:26:18
stylewarning
fouric, your friend seems like he or she needs to be convinced that almost never to-the-metal performance matters
3:26:29
beach
asarch: There are not McCLIM-related problems. You would have the same problem compiling just about any software.
3:27:53
beach
asarch: You should also install Quicklisp. And it is highly recommended that you then follow the Quicklisp instructions for installing SLIME.
3:30:49
astronavt
what's the idiomatic lisp way to say "if x is not nil, return x, else return <some default>"?
3:32:47
beach
Here X is something else with a default value of NIL. NULL is used to test whether it has the default value.
3:33:20
stylewarning
I used to think what you thought, then came to the conclusion that idioms can be a little bit informal, and as long as idioms are understood, they don’t cause much harm
3:34:22
astronavt
that's almost exactly what i wrote, modulo (null _) instead of just checking for nil directly
3:35:06
beach
astronavt: I have already stated my opinion, which is based on the Common Lisp style guide by Kent Pitman and Peter Norvig.
3:35:47
stylewarning
astronavt: you could use a macro like WHEN-LET from Alexandria, or you could do the crazy thing I suggested and write (or (getenv) “default”), which goes against the above advice (but I personally find perfectly clear)
3:38:31
beach
astronavt: By the way, it is a good rule to always test for the special case in code. That way the maintainer can remove those cases from his or her mental set of issues while reading the rest of the code. That is another reason to start testing for X being NIL.
3:40:32
astronavt
beach true. in some sense, the "special case" is having X be set (i'm testing for an environment variable)
3:41:57
beach
stylewarning: I guess I do. Never considered using singular they. But I haven't lived in an English-speaking country for 30 years.
3:45:55
beach
Hmm. Not quite true. I spent a year in Austin and a year in Auckland during those 30 years. Still, that was 15 years ago or so.
3:51:05
astronavt
where can i read up on how lisp handles paths? im surprised to see that "home:filename" gives me "$HOME/filename"
3:53:30
astronavt
thanks... and what's the right way to search through the CLHS? download it and use Grep?
3:57:52
astronavt
so there has to be a search tool *somewhere* right? or at least download the source? i mean i could use an excuse to get my hands dirty with PageRank and web scraping...
5:19:52
borei
i have function that can return list of 2 lists, or i can make it returning 2 values - list1 and list2
5:29:46
pjb
multiple-value-bind multiple-value-setq multiple-value-list multiple-value-call (setf values), etc.
5:31:48
aeth
It's an oversight in the never-changing-again spec to not have let assign multiple values like setf. multiple-value-bind can nest deep
5:34:11
aeth
And as for returning, if it's fewer than 5 items, and it makes sense to do it, multiple values can work. Especially 2. decode-universal-time returns 9, but that's the only one I've encountered that returns that many values
5:36:37
aeth
Yeah, imo multiple return values makes the most sense when there are two values returned and the second is optional, e.g. the second value in hash table retrieval or the remainder in rounding operations like floor... but it definitely makes sense in other contexts, too.
7:50:11
SaganMan
but with do it works and I've seen some examples where there is neither do or collect
7:51:58
phoe_
SaganMan: you need a loop keyword to establish a context for LOOP - it's just how it works. you have FOR to create a variable, IN to tell loop what to iterate over, and you need DO to tell LOOP that now it should be executing code.
7:52:11
SaganMan
beach: yeah, search for alpha45 in this http://cl-cookbook.sourceforge.net/loop.html
7:52:49
flip214
SaganMan: you might want to look at the ITERATE macro instead. That one has a more consistent syntax.
7:53:31
SaganMan
ohh, I don't know what the loop keywords are. So if the loop has just one of loop keywords, it's ok?
7:55:41
SaganMan
another question, did the later languages adopted the loop like feature of lisp or did this came from something else?
7:58:01
beach
And most languages don't have built-in lists, so they don't have loop constructs like collect, for/in, for/on.
8:02:24
beach
phoe_: Well, in most languages, there is a pre-tested and a post-tested loop. The latter makes at least one execution of the body.
8:03:17
SaganMan
now I kind of understand why there are so many variables not declared warnings in emacs packages
8:06:10
jackdaniel
we had recently a discussion about negations - they are hard to process by human brain
8:07:20
jackdaniel
I think that this topic was talked about as well, and some native speaker said, that it's a problem for him too
8:08:19
jackdaniel
this may be relevant: https://www.psychologicalscience.org/news/releases/true-or-false-how-our-brain-processes-negative-statements.html
8:40:47
phoe_
if list-1 is (3 2 1) and list-2 is (4 5 6), then (mapcar #'list list-a list-b) will evaluate to ((3 4) (2 5) (1 6))
8:47:39
dmiles
i am getting.. (sb-mop:class-precedence-list (find-class 'SB-GRAY:FUNDAMENTAL-BINARY-STREAM))
8:51:54
basket
dorothyw: digitRootSort should be called digit-root-sort, and instead of mapping a lambda like (lambda (x) (write-to-string x)) you can just use #'write-to-string
8:51:59
dmiles
what i am doing is interating thru the Mop to ensure genrate a type/slot heirary in which i am writting out prolgo declarations
8:57:53
dorothyw
It takes a list of ints and turns those into strings then breaks them into lists of characters then turns those lists of characters to lists of strings, then turns those to ints, then adds the ints, then sorts the list
9:07:45
beach
dorothyw: You need to format your program according to agreed-upon rules. You have way too many newlines, after LAMBDA, after LET* etc.
9:09:30
beach
dorothyw: There is a lot of unnecessary code in there too, like (map 'list (lambda (char) (string char)) list-of-chars)