Hi Ryan;

  Again, thank you.

  The problem is solved now.

  I'm using a temporary subdirectory to copy the relevant files from the
library.

  The most obvious thing was tripping me up that the library binding was
not visible.

  My first workaround was to make a symlink for gfactor, but I think I will
follow your suggestion to make the local modification to the task source
code.

  Wow.

  Ryan, you are awesome! Thanks for the patience and the detailed
assistance.

Ken Wolcott

On Sat, Sep 27, 2025 at 11:17 PM Ryan Carsten Schmidt <
[email protected]> wrote:

> On Sat, Sep 27, 2025 at 10:46 PM Ryan Carsten Schmidt wrote:
>
>
> > Here's my attempt to build a Pluto GMP binding:
> >
> > #!/bin/bash
> >
> > # clang -c -fpic libpluto-gmp.c -I
> /opt/homebrew/Cellar/gmp/6.3.0/include/
> > # clang -O3 -fpic -shared -o libpluto-gmp.dylib libpluto-gmp.o -lgmp -L
> /opt/homebrew/Cellar/gmp/6.3.0/lib/
>
> If we wanted to try to reproduce this on our systems, where would we get
> this libpluto-gmp.c?
>
>
> I believe the relevant link for this project is:
>
> https://rosettacode.org/wiki/Fermat_numbers#Pluto
>
> One needs to copy the code from there into a file e.g. fermat.pluto, but
> also follow the links to Pluto-bignum and Pluto-fmt and copy their code
> into additional files bignum.pluto and fmt.pluto and additionally for
> bignum the code of libpluto-gmp.c is given and how to compile it.
>
> I also downloaded the macOS binary of Pluto from their GitHub releases and
> unpacked it into /Volumes/Shared where it created a MacOS.X64 directory.
>
> Provided I have libpluto-gmp.dylib in the current directory, I'm able to
> run "/Volumes/Shared/MacOS.X64/pluto fermat.pluto" and get this output:
>
> The first 10 fermat numbers are:
> F₀ = 3
> F₁ = 5
> F₂ = 17
> F₃ = 257
> F₄ = 65537
> F₅ = 4294967297
> F₆ = 18446744073709551617
> F₇ = 340282366920938463463374607431768211457
> F₈ =
> 115792089237316195423570985008687907853269984665640564039457584007913129639937
> F₉ =
> 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097
>
> Factors of the first 9 Fermat numbers:
> F₀ = {3} (prime)
> F₁ = {5} (prime)
> F₂ = {17} (prime)
> F₃ = {257} (prime)
> F₄ = {65537} (prime)
> F₅ = {641, 6700417}
> F₆ = {274177, 67280421310721}
> sh: factor: command not found
> /Volumes/Shared/MacOS.X64/pluto: fermat.pluto:29: attempt to index a nil
> value (field 'integer index')
> stack traceback:
> fermat.pluto:29: in main chunk
> [C]: in ?
> F₇ = {}%
>
> The problem here is that "factor" is a GNU coreutils command and we
> install all of those with a "g" prefix. One solution is to edit
> bignum.pluto and find the line:
>
>         os.execute($"factor {n:tostring()} > {filename}")
>
> and change it to:
>
>         os.execute($"gfactor {n:tostring()} > {filename}")
>
> Then, provided the coreutils port is installed, I get hopefully the output
> you're looking for:
>
> The first 10 fermat numbers are:
> F₀ = 3
> F₁ = 5
> F₂ = 17
> F₃ = 257
> F₄ = 65537
> F₅ = 4294967297
> F₆ = 18446744073709551617
> F₇ = 340282366920938463463374607431768211457
> F₈ =
> 115792089237316195423570985008687907853269984665640564039457584007913129639937
> F₉ =
> 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097
>
> Factors of the first 9 Fermat numbers:
> F₀ = {3} (prime)
> F₁ = {5} (prime)
> F₂ = {17} (prime)
> F₃ = {257} (prime)
> F₄ = {65537} (prime)
> F₅ = {641, 6700417}
> F₆ = {274177, 67280421310721}
> F₇ = {59649589127497217, 5704689200685129054721}
> F₈ = {1238926361552897,
> 93461639715357977769163558199606896584051237541638188580280321}
>
> The smallest factor of F₉ is: 2424833
>
> If you want this to work when libpluto-gmp.dylib is somewhere other than
> the current directory, you can edit bignum.pluto and find the line:
>
>                 case "macos"   -> "./libpluto-gmp.dylib"
>
> and change the path to the absolute path where you placed the library.
>

Reply via email to