Re: "unbound variable"

2011-06-27 Thread Tomas By
On Mon, June 27, 2011 05:40, nalaginrut wrote:
> I think you need to import this symbol in your module, in this case, I
> think it's mapdisplay.scm. If get-map's not within a module, you'd need
> to get this symbol with "dynamic-link" and it's friends.

It's in the top-level module.

| guile> (apropos "get-map")
| (guile-user): get-map #

My extensions are statically linked into a Scheme shell executable.

Do I need to extra-import top-level functions into my Scheme module?
How do I do that?

/Tomas



>> Hi all,
>>
>> I have an extended Guile interpreter with a C function "get-map",
>> defined by "scm_c_define_gsubr", that I then try to use in the
>> (pure Scheme) module "mapdisplay", with the following result:
>>
>> | mapdisplay.scm:36:12: In expression (get-map wg name):
>> | mapdisplay.scm:36:12: Unbound variable: get-map
>> | ABORT: (unbound-variable)
>> | guile> get-map
>> | #
>> | guile>
>>
>> Any ideas what is happening here? How can I debug it?
>>
>> /Tomas





Re: "unbound variable"

2011-06-27 Thread nalaginrut
> On Mon, June 27, 2011 05:40, nalaginrut wrote:
> > I think you need to import this symbol in your module, in this case, I
> > think it's mapdisplay.scm. If get-map's not within a module, you'd need
> > to get this symbol with "dynamic-link" and it's friends.
> 
> It's in the top-level module.
> 
> | guile> (apropos "get-map")
> | (guile-user): get-map   #
> 
> My extensions are statically linked into a Scheme shell executable.
> 
> Do I need to extra-import top-level functions into my Scheme module?
> How do I do that?
> 
> /Tomas

I can't give accurate answer because you provided less information. So I
just give a guess:
If you have wrapped a module in mapdisplay.scm, you'd have imported some
symbols out of this module. I know you can see get-map in REPL's
"current-module", but mapdisplay can't see it in it's own
"current-module". They are different.
If you write this get-map within a module, you may use "#:use-module" in
mapdisplay.scm. If not, you need to import it from your .so file with
FFI such as "dynamic-link". You may checkout it out in the manual.



-- 
GNU Powered it
GPL Protected it
GOD Blessed it

HFG - NalaGinrut

--hacker key--
v4sw7CUSMhw6ln6pr8OSFck4ma9u8MLSOFw3WDXGm7g/l8Li6e7t4TNGSb8AGORTDLMen6g6RASZOGCHPa28s1MIr4p-x
 hackerkey.com
---end key---




Re: "unbound variable"

2011-06-27 Thread Tomas By
Hi again,

Thanks for the help so far.

On Mon, June 27, 2011 10:38, nalaginrut wrote:
> I can't give accurate answer because you provided less information. So I
> just give a guess:
> If you have wrapped a module in mapdisplay.scm, you'd have imported some
> symbols out of this module. I know you can see get-map in REPL's
> "current-module", but mapdisplay can't see it in it's own
> "current-module". They are different.
> If you write this get-map within a module, you may use "#:use-module" in
> mapdisplay.scm. If not, you need to import it from your .so file with
> FFI such as "dynamic-link". You may checkout it out in the manual.

Well, as I tried to explain, "get-map" is statically linked into the
executable, defined with "scm_c_define_gsubr" which is called from the
"inner_main" that is passed to "scm_boot_guile".

I don't think I should have to also dynamically link it.

Do I need to do another "define_gsubr" (or whatever) from inside mapdisplay?

/Tomas



>> On Mon, June 27, 2011 05:40, nalaginrut wrote:
>> > I think you need to import this symbol in your module, in this case, I
>> > think it's mapdisplay.scm. If get-map's not within a module, you'd
>> need
>> > to get this symbol with "dynamic-link" and it's friends.
>>
>> It's in the top-level module.
>>
>> | guile> (apropos "get-map")
>> | (guile-user): get-map  #
>>
>> My extensions are statically linked into a Scheme shell executable.
>>
>> Do I need to extra-import top-level functions into my Scheme module?
>> How do I do that?
>>
>> /Tomas





Re: "unbound variable"

2011-06-27 Thread nalaginrut
> Hi again,
> 
> Thanks for the help so far.
> 
> On Mon, June 27, 2011 10:38, nalaginrut wrote:
> > I can't give accurate answer because you provided less information. So I
> > just give a guess:
> > If you have wrapped a module in mapdisplay.scm, you'd have imported some
> > symbols out of this module. I know you can see get-map in REPL's
> > "current-module", but mapdisplay can't see it in it's own
> > "current-module". They are different.
> > If you write this get-map within a module, you may use "#:use-module" in
> > mapdisplay.scm. If not, you need to import it from your .so file with
> > FFI such as "dynamic-link". You may checkout it out in the manual.
> 
> Well, as I tried to explain, "get-map" is statically linked into the
> executable, defined with "scm_c_define_gsubr" which is called from the
> "inner_main" that is passed to "scm_boot_guile".
> 
> I don't think I should have to also dynamically link it.
> 
> Do I need to do another "define_gsubr" (or whatever) from inside mapdisplay?
> 
> /Tomas
> 


Well, I see your situation. And I must say that I don't blend the
extension with executive entry file. So I'm not sure whether a symbol
imported in inner_main directly would be available in every module. 

  


-- 
GNU Powered it
GPL Protected it
GOD Blessed it

HFG - NalaGinrut

--hacker key--
v4sw7CUSMhw6ln6pr8OSFck4ma9u8MLSOFw3WDXGm7g/l8Li6e7t4TNGSb8AGORTDLMen6g6RASZOGCHPa28s1MIr4p-x
 hackerkey.com
---end key---




Re: "unbound variable"

2011-06-27 Thread Peter Brett
"Tomas By"  writes:

> I have an extended Guile interpreter with a C function "get-map",
> defined by "scm_c_define_gsubr", that I then try to use in the
> (pure Scheme) module "mapdisplay", with the following result:
>
> [snip]
>
> Any ideas what is happening here? How can I debug it?

Having read the rest of this thread so far, I suggest that you put your
built-in functions into a module which can then be loaded by your pure
Scheme functions.

You need to do something like this:

  static SCM
  my_func (SCM arg)
  {
/* ... blah blah ... */
  }

  static void
  init_builtins_module ()
  {
scm_c_define_gsubr ("my-func", 1, 0, 0, my_func);
scm_c_export ("my-func", NULL);
  }

  void
  init_builtins ()
  {
scm_c_define_module ("myapp builtins",
 init_builtins_module,
 NULL);
  }

Then in your pure Scheme module, you can add:

  (use-modules (myapp builtins))

I hope that helps.

Regards,

 Peter

-- 
Peter Brett 
Remote Sensing Research Group
Surrey Space Centre




Re: "unbound variable"

2011-06-27 Thread Linas Vepstas
On 27 June 2011 04:41, Peter Brett  wrote:
> "Tomas By"  writes:
>
>> I have an extended Guile interpreter with a C function "get-map",
>> defined by "scm_c_define_gsubr", that I then try to use in the
>> (pure Scheme) module "mapdisplay", with the following result:
>>
>> [snip]
>>
>> Any ideas what is happening here? How can I debug it?
>
> Having read the rest of this thread so far, I suggest that you put your
> built-in functions into a module which can then be loaded by your pure
> Scheme functions.

Having used scm_c_define_gsubr in three different projects now, I'l
disagree .. never had to create a module to use it ...

Not sure what the bug is, though ... does get-map work
if you don't use it within the module?  Can you verify it works
in some simple way?

--linas



Re: "unbound variable"

2011-06-27 Thread Tomas By
On Mon, June 27, 2011 23:44, Linas Vepstas wrote:
> Not sure what the bug is, though ... does get-map work
> if you don't use it within the module?  Can you verify it works
> in some simple way?

yes it works fine, except from inside the module.