<div dir="ltr">Liam,<div><br></div><div>I am not trying to bludgeon this issue to death nor convince the you that<div>I am right and you are wrong.</div><div><br></div><div><div>In a nutshell, I started on this path because of exception errors when trying to</div><div>load GSLL on Windows (SBCL or CCL) using GSL compiled MinGW64.  I </div><div>traced this to the initialization of the permutation structures and the size of</div><div>the requested memory (see recent post on CFFI mailing list).</div><div><br></div><div>I decided to rewrite a small part of permutation.lisp to use GSL's code to directly</div><div>initialize and query permutation structure.  The attached patch contains the </div><div>rewrite and some minor edits.  All the permutation and qrpt tests pass.</div><div><br></div><div>The patch should be considered a proof-of-concept (or failure of concept).<div><br></div></div><div>For me, this patch has cleared the exception errors that have started me on this</div><div>trek.  Even if it is not accepted, I learned something, and it was fun.  And I can</div><div>keep it on my GSLL so that it runs for me.</div><div><br></div><div>Best,</div><div><br></div><div>Mirko<br></div><div><br></div><div><br></div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 26, 2015 at 10:24 AM, Liam Healy <span dir="ltr"><<a href="mailto:lhealy@common-lisp.net" target="_blank">lhealy@common-lisp.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Added thought: you can lookup any GSL (C) function to find the CL<br>
equivalent by using gsl-lookup. So for example<br>
<br>
(gsl:gsl-lookup "gsl_permute_vector")<br>
PERMUTE<br>
T<br>
<br>
tells you #'permute is the function you want. If there is no<br>
equivalent (there are some C functions with no interface in CL), you<br>
will get NIL as the return value of this function.<br>
<span class=""><font color="#888888"><br>
Liam<br>
</font></span><div class=""><div class="h5"><br>
<br>
On Wed, Nov 25, 2015 at 11:20 PM, Mirko Vukovic <<a href="mailto:mirko.vukovic@gmail.com">mirko.vukovic@gmail.com</a>> wrote:<br>
> Thanks for the explanations - I missed the :generic and :method specifiers.<br>
> I'll study the macro-expansions.<br>
><br>
> Sorry for the noise.<br>
><br>
> Mirko<br>
><br>
> On Tue, Nov 24, 2015 at 10:16 PM, Liam Healy <<a href="mailto:lhealy@common-lisp.net">lhealy@common-lisp.net</a>> wrote:<br>
>><br>
>> The original code looks right to me.<br>
>><br>
>> You have taken the generic function and the associated foreign vector<br>
>> methods #'permute and gratuitously renamed them #'permute-vector,<br>
>> leaving the method for raw C pointer with the original name and no<br>
>> generic function. Then you completely delete the generic function and<br>
>> vector methods for #'permute-inverse for no apparent reason, leaving a<br>
>> method for the raw C pointer only.<br>
>><br>
>> There is no duplicated code here. There is certainly the equivalent of<br>
>> gsl_permute_vector, it is the GRID:VECTOR-DOUBLE-FLOAT (second arg)<br>
>> method of #'permute (which you renamed).<br>
>><br>
>> I recommend macroexpansion as a way of seeing what's being defined. If<br>
>> you use emacs, place the cursor on the defmfun line and do C-c C-m.<br>
>> Then you will see all the generic functions and methods, and you will<br>
>> see there is no error in the original code.<br>
>><br>
>> On Tue, Nov 24, 2015 at 5:43 PM, Mirko Vukovic <<a href="mailto:mirko.vukovic@gmail.com">mirko.vukovic@gmail.com</a>><br>
>> wrote:<br>
>> > Because of a typo, GSLL did not have the equivalent of<br>
>> > GSL_PERMUTE_VECTOR.<br>
>> ><br>
>> > There was also a section of duplicated code.<br>
>> ><br>
>> > This patch should fix these errors.<br>
>> ><br>
>> > NOTE: I did not test this patch - My GSLL system is not behaving<br>
>> > super-cleanly on MSYS2 and GSL2.1.  Proceed with care.<br>
>> ><br>
>> > Mirko<br>
><br>
><br>
</div></div></blockquote></div><br></div></div></div></div></div>