freenode/lisp - IRC Chatlog
Search
22:40:27
copec
I've previously only done math things in CL as a hobby, but I'm trying to interface with Plesk panels that I manage for my work
22:41:53
phoe
the naïve way would be to use emacs with some sorta xml-mode since a schema is just an xml document
22:42:23
phoe
a more involved way would be to try and convert that into s-expressions and/or a nested Lisp object mayhaps
22:44:09
copec
They have them rendered as .svg's but without a legend or anything, I guess I can look at the actual .xsd files and lookup what the tags mean in the branches
22:45:22
copec
I have two initial thoughts on implementation, simple functions that wrap the stream with tags, but it would be neat to figure out a macro to write a defclass hierarchy from the xsd
1:00:43
no-defun-allowed
Indeed. Though I assume you would want to make sure the returned form tests X, as the macro currently tests if the symbol PI is greater than 0.
1:01:50
Alfr
And as for why it doesn't work, macro expansion doesn't evaluate its arguments. Thus you're passing the symbol PI, and then X is bound to it, thus you're trying to evaluate (> 'PI 0).
1:03:17
bmansurov
Thanks both. Assuming I want to make that macro work, how do I pass the constant PI to the macro, rather than the symbol?
1:03:33
no-defun-allowed
If you really wanted to, you may write (defmacro positivep (x) `(if (,x 0) 'yes 'no))
1:05:37
bmansurov
I see. I guess I should share another example where the problem I'm trying to solve is more pronounced. Here it is:
1:06:31
White_Flame
however, in most cases, what you really want is to construct code that the compiler will collapse for you, instead of trying to fiddle stuff at this level
1:08:16
no-defun-allowed
You will have to decide if (> from to) at runtime, perhaps by replicating and generating (if (> from to) (loop ... to ...) (loop ... downto ...)). But this would again be better as a function.
1:08:25
White_Flame
this is a runtime decision you have to make, based on the actual runtime value being passed into a call; this isn't something you can statically resolve
1:09:03
bmansurov
OK, thanks. So there's no way to solve the above problem with macros other than creating two loops?
1:09:51
White_Flame
if you make 2 loops, you'll have a (if (> from to) (loop ...) (loop ..)), and if FROM & TO are numeric literals, the CL compiler should constant collapse one of them away
1:10:49
bmansurov
I went this rabbit hole because I didn't want to write a function with two loops. I appreciate everyone's responses.
1:11:46
White_Flame
even if you special-cased in a test for pi, what would you think ot generate for (seq x y) ?
1:19:34
bmansurov
My biggest gripe with Common Lisp is that at some point I got this macro stuff, but because I didn't practice writing CL, I forgot it. Learning Common Lisp is not like learning to ride a bicycle, unfortunately. I have to relearn this stuff. ;(
1:21:42
bmansurov
I don't know. For me, unlike JavaScript, for example, Common Lisp was hard to learn (even though I already knew how to program). It's even harder to retain that knowledge.
1:26:31
White_Flame
and of course the reason there's upto vs downto is that the exit comparison needs to be <= or >= depending on the direction
1:27:15
bmansurov
Thanks, I appreciate your help. I was more interested in getting ~to~ and ~downto~ working. As others have suggested, and as you have showed, there are many ways to skin this cat. I was after that specific way.