[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) |
Hi,
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
arguments,
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
definition.
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
expecting.
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