From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: Bug: Babel: asymptote: erroneous conversion of heterogeneous-typed table Date: Mon, 29 Aug 2011 12:02:11 -0600 Message-ID: <87hb506qqk.fsf@gmail.com> References: <20110829080003.GA12790@discus> <87hb50li4b.fsf@gmail.com> <878vqclf64.fsf@gmail.com> <87mxesjs9e.fsf@gmail.com> <87fwkkjhvt.fsf@gmail.com> <87y5yc6tx4.fsf@gmail.com> <87vctgi0ve.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([140.186.70.92]:37016) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qy6A9-0003GQ-LK for emacs-orgmode@gnu.org; Mon, 29 Aug 2011 14:02:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qy6A6-0006hN-JJ for emacs-orgmode@gnu.org; Mon, 29 Aug 2011 14:02:21 -0400 Received: from mail-yw0-f41.google.com ([209.85.213.41]:60191) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qy6A6-0006hI-Dm for emacs-orgmode@gnu.org; Mon, 29 Aug 2011 14:02:18 -0400 Received: by ywm13 with SMTP id 13so5247285ywm.0 for ; Mon, 29 Aug 2011 11:02:18 -0700 (PDT) In-Reply-To: <87vctgi0ve.fsf@gmail.com> (Nicolas Goaziou's message of "Mon, 29 Aug 2011 19:27:49 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Nicolas Goaziou Cc: =?utf-8?Q?Andr=C3=A1s?= Major , emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Nicolas Goaziou writes: > Hello, > > Eric Schulte writes: > >> I don't know asymptote well enough to know if you would /always/ want a >> heterogeneous table to be converted to all strings, or if there would >> ever be a case where you would want mixed types in a table. > > There are no mixed types arrays in Asymptote, hence the problem of the > OP. You can choose between int[][], real[][] or string[][] (and other > types specific to Asymptote and, as such, irrelevant here), but you > never want an heterogeneous table. > > So, the real question is: what should Org do when an user tries to fit > a mixed array into an Asymptote var? Until now, it was throwing an > error. With this patch, _one_ string in the table will trigger the > string type for every other cell. > > But this kind of an hidden feature. The user has to be aware that, under > some circumstances, ints in his table will become strings. > > On the other hand, an user knowing he can't mix types in Asymptote (as > he should) can't do much about it, as far as I know. > > As I said in this thread, an elegant solution would be to have a way to > specify Babel to output tables of strings easily: > > | x | "1" | "2" | "3" | > | y | "1" | "4" | "9" | > > That would be the less surprising, as the user would get the type he > sees in his table. > Given that asymptote can not make use of heterogeneous tables, it seems that it would be easiest to simply silently converted any table containing a single string element to a table of all strings. I've just applied your previous patch (thanks for the patch!). If this proves confounding in the future we can always revisit the decision. Additionally, I've just added a new function to the library of babel which can be used to convert all elements of a table to strings. It is not needed here, but it could be useful in the future. --=-=-= Content-Type: text/x-org Content-Disposition: inline; filename=all-to-string.org ** Convert every element of a table to a string #+tblname: hetero-table | 1 | 2 | 3 | | a | b | c | #+source: all-to-string #+begin_src emacs-lisp :var tbl='() (defun all-to-string (tbl) (if (listp tbl) (mapcar #'all-to-string tbl) (if (stringp tbl) tbl (format "%s" tbl)))) (all-to-string tbl) #+end_src #+begin_src emacs-lisp :var tbl=hetero-table (mapcar (lambda (row) (mapcar (lambda (cell) (stringp cell)) row)) tbl) #+end_src #+results: | nil | nil | nil | | t | t | t | #+begin_src emacs-lisp :var tbl=all-to-string(hetero-table) (mapcar (lambda (row) (mapcar (lambda (cell) (stringp cell)) row)) tbl) #+end_src #+results: | t | t | t | | t | t | t | --=-=-= Content-Type: text/plain Cheers -- Eric > > > Regards, -- Eric Schulte http://cs.unm.edu/~eschulte/ --=-=-=--