--- On Thu, 2/4/10, ypatios ypatios@gmail.com wrote:
From: ypatios ypatios@gmail.com Subject: Re: [PD] [list] output To: "Jonathan Wilkes" jancsika@yahoo.com Cc: pd-list@iem.at Date: Thursday, February 4, 2010, 6:31 PM hello
But as far as I can tell, [list] doesn't do any conversion at its outlet--
everything it outputs will have the selector "list", and it's up to other
objects like [route] to do any conversion they deem necessary.
For example, take the bug with sigbinops:
[put anything you want in this message box(
|
[list]
|
[+~ ]
error: inlet: expected 'signal' but got 'list'
[1, 1 2, a, a b, a 2 b ( | [list ] | [print ]
gives the following (0.42-5):
###### print: 1 print: 1 2 print: symbol a print: list a b print: list a 2 b
######
so [list ] does some kind of conversion. what i don't understand is why there is no selector printed in the first two messages, where only numbers are present.
As far as your output from [print] goes:
For "1" and "1 2", they are an implicit float and implicit list, respectively. This is a convenience feature of Pd: you don't have to type "float 1" every time you want to send a number from a msg box to a [+] object, for example.
For "list a b" and "list a 2 b", you would expect this because all non-list messages are converted to lists at the _inlets_ of the [list] object.
So that leaves "symbol a" unexplained: why isn't it "list a" if my theory is correct? It's because the [print] object decided to print it that way: it receives a message "list a" and calls the print_list method, which decides to print "symbol a" instead of "list a".
Here's a trick that shows clearly what is happening in Pd 0.42-5, using the -n flag of [print], which suppresses the word "print":
[1( | [print]
[1( | [print -n]
For the first one, the print_method (x_interface.c) prints the word "print", followed by a colon, and the float itself. For the second one, the word "print" is absent, so print_method then decides not to print a colon either. Only the float is printed.
However, consider the following:
[1( | [list] | [print -n]
Now the [print] calls the method print_list because the incoming message is a list. How do I know this? Because of a bug: instead of just printing the float-atom (as above), the output is ": 1", which matches the way print_list is telling Pd to format a list with at least one element that is not a symbol. [1]
Likewise, the output "symbol a" you referred to above enters [print] as "list a", and gets formatted as "symbol a" because it's a one-element list, with that element being a symbol-atom.
This is complicated by the fact that objects like [route] do a similar trick.
Ok, now I'm pretty convinced that [list] always outputs a list.
[1]- On older versions of Pd, you can still see a discrepancy if, for example, you compare the way [print] formats a gpointer, and a list containing one gpointer.
-Jonathan
anyways, you should provide [+~ ] operator with an argument if you want it to expect messsages instead of a signal (check help patch) :-)
ciao
-- ypatios