[PD] Feature Proposal
Jonathan Wilkes
jancsika at yahoo.com
Thu Aug 18 21:28:32 CEST 2016
Hi Roman,I'll try to address the question of how difficult each of these is to implement.
[...]
> == GROUPING IN ABSTRACTION ARGUMENTS ==
> Allow grouping of atoms, so that you can pass a whole list to one
> single argument like this:
> [myabs ( one two 3 ) 4 five]
> inside the abstraction:
> $1 would evaluate to 'list one two 3'
> $2 would evaluate to '4'
> $3 would evaluate to '5'
This would require changes to t_atom because there is no "list" atom type. That's
a fairly involved change, especially given that plenty of internal and external classes
do "lazy" type checking (if it isn't a float it must be a symbol, etc.).
> == GETTING NUMBER OF ARGS ==
> With the same example:
> [myabs ( one two 3 ) 4 five]
> inside the abstraction:
> $# would evaluate to '3' (number of arguments given)
This requires changes to the parser, which requires extensive testing and
bug fixing, too.
Pd-l2ork uses "$@" to expand to all the arguments, which you can
then shoot to a [list length] to get the equivalent of "$#". It's based off a patch
submitted originally submitted to Pd Vanilla by IOhannes which is probably
still hanging around on the sourceforge patch tracker.
> == GROUPING IN MESSAGES ==
> [1 2 ( 97 98 99 ) 4 5(
> |
> [$2 (
> would give '97 98 99'
Did you mean [$3(?
If so, what would [$3 3( give you? '97 98 99 3' or '(97 98 99) 3'?
In other words, what would be the rule for flattening a list atom into
a series of atoms?
Regarding parentheses-- Gridflow adds a syntax like that for handling
nested message data. I don't like the idea in general, but I like Gridflow's
implementation better than your example because it doesn't require
space in between the parentheses and the data itself.
Anyhow, this is another parser change (in m_binbuf).
> == NAMED ARGUMENTS ==
> [myabs freq=440 vol=1]
> inside the abstraction:
> $freq would evaluate to '440'
> $vol would evalute to '1'
> If a certain argument is not specified as creation argument, it would
> evaluate to '0' (similar to existing behavior).
What would $1 and $2 evaluate to in this case? What would [$freq( expand to?
I'm not actually sure what changes this would require. At the very least you'd need a
new case in the parser for handling dollar signs that don't match the A_DOLLAR or
A_DOLLSYM. It seems like you'd need a new atom type, too. Let's call it
A_DOLLVAR.
How does A_DOLLVAR interact with A_DOLLSYM and A_DOLLAR? Can it be
concatenated with them? (The case for "$@" is that it doesn't concatenate.) But
you also have to account for A_DOLLVAR expanding to arbitrarily-deeply-nested
lists because it's going to work inside message boxes, too.
> == USE CASE ==
> [oscformat] takes an arbitrary number of arguments to create an OSC
> address. While I find this the cleaner and more pd-like way than
> /one/two/three, this has big draw-back. You currently cannot pass the
> OSC address (containing an arbitrary number of address fields) to an
> abstraction when using [oscformat]. The number of arguments must known
> beforehand when using this format. With [packOSC] from the osc library,
> you can do:
> [myabs /base/address]
> and therein:
> [packOSC $1/freq]
> which evaluates to /base/address/freq.
> By allowing grouping of arguments, one could achieve the same without
> resorting to long symbols (which has other drawbacks). In the main
> patch you could create:
> [myabs ( base address )]
> and therein:
> [oscformat $1 freq]
> and [oscformat] would actually see 'base address freq'.
Wouldn't it see '(base address) freq'?
> There are many other cool things you could do. It would allow to create
> lists of lists, which can be easily split again later (which is
> currently very hard to do and involves a lot of serializing and using
> delimiters or prepended number-of-elements). Generally, it would allow
> to create much more flexible abstractions.
Does [text] address some of this?
> Any feedback welcome.
> Roman
_______________________________________________
Pd-list at lists.iem.at mailing list
UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20160818/a0e6597e/attachment-0001.html>
More information about the Pd-list
mailing list