[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Texmacs-dev] Overwriting definitions with tm-define

From: TeXmacs
Subject: Re: [Texmacs-dev] Overwriting definitions with tm-define
Date: Thu, 24 Dec 2020 12:45:39 +0100
User-agent: Mutt/1.5.21 (2010-09-15)


Not all scheme functions were defined using tm-define.
The function 'translate' is defined in the glue, so it cannot be tm-overloaded.

Functions that _are_ defined using tm-define can perfectly be overloaded to
take a different number of parameters.  For instance, kbd-return takes zero 
but you can overload it as follows:

  (tm-define (kbd-return . args)
    (:require (nnull? args))
    (display* "kbd-return " args "\n"))

What you cannot do is "overload" it like this:

  (tm-define (kbd-return arg)
    (display* "kbd-return " arg "\n"))

because that is really a redefinition instead of overloading a previous 
Overloaded definitions usually come with a ':require' or ':mode' clause,
or with an explicit call of the 'former' primitive:

  (tm-define (kbd-return . args)
    (if (null? args) (former)
        (display* "kbd-return " args "\n")))

If you want to overload a function that was not defined using 'tm-define'
then you can proceed as follows:

  (define built-in-translate translate)

  (tm-define (translate . args)
    (if (== (length args) 1)
        (apply built-in-translate args)
        (apply my-own-translate args)))

I do not think that we need a separate primitive for overloaded definitions
(as Max suggests).  On the other hand, we might want to use different scoping
rules in the future.  We might also automatically consider a tm-define
with a fixed number of arguments as overloading potential previous definitions
with different numbers of arguments.  Maybe that was what Giovanni was 

Best wishes, --Joris

On Thu, Dec 24, 2020 at 12:13:43PM +0100, Massimiliano Gubinelli wrote:
> Hi Giovanni,
>  very likely "translate" is already defined otherwise and overloading it with 
> different number of parameters is not possible.
> I think this speaks for a request I was making to Joris, that is to 
> distinguish the *definition* of a new overloadable function and its 
> *overloading*. Both operation are currently handled by tm-define but from my 
> point of view this is not very nice. Especially because the tm-defined 
> functions are by default imported in all texmacs modules.
> Max
> > On 23. Dec 2020, at 23:36, Giovanni Piredda <pireddag@posteo.de> wrote:
> > 
> > Dear developers - dear all,
> > 
> > I have noticed that trying to redefine with tm-define the procedure 
> > "translate" gets TeXmacs in a non-recoverable state. I found it out as I 
> > wanted to call "translate" a graphical procedure.
> > 
> > One error message is
> > 
> > Guile error: ((wrong-number-of-args #f Wrong number of arguments to ~A 
> > (#<procedure translate (a b c)>) #f))
> > .../TeXmacs/progs/kernel/boot/debug.scm:231:19: In procedure throw in 
> > expression (apply throw err):
> > .../TeXmacs/progs/kernel/boot/debug.scm:231:19: Wrong number of arguments 
> > to #<procedure translate (a b c)>
> > 
> > and "native menubar trick" appears in the menus.
> > 
> > Is this expected? I tried to redefine tr-file and this on the opposite is 
> > possible.
> > 
> > I am going to call the procedure for translation "shift", so I do not need 
> > the redefinition of "translate" to work, but I am curious.
> > 
> > Giovanni
> > 
> > 
> > _______________________________________________
> > Texmacs-dev mailing list
> > Texmacs-dev@gnu.org
> > https://lists.gnu.org/mailman/listinfo/texmacs-dev
> _______________________________________________
> Texmacs-dev mailing list
> Texmacs-dev@gnu.org
> https://lists.gnu.org/mailman/listinfo/texmacs-dev

reply via email to

[Prev in Thread] Current Thread [Next in Thread]