From: Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
To: emacs-orgmode@gnu.org
Subject: org-babel guile source block bug in handling multiple values
Date: Tue, 7 Mar 2023 11:27:02 +0000 [thread overview]
Message-ID: <9eab60bc-9b82-e037-d63b-3d879573ae32@posteo.de> (raw)
[-- Attachment #1: Type: text/plain, Size: 4465 bytes --]
Hello Org users!
I think I found a bug in how org-babel works with at least GNU Guile source
blocks. I could not reproduce this for example with a racket source block,
because somehow there is no ob-racket and I think I would need that. I could try
other Schemes like maybe Chicken, if there is ob-chicken or so available. The
issue happens on 2 separate machines.
I am not sure on which repository I should open an issue for this specific bug,
or if perhaps this mailing list is exactly the right place. Feel free to point
me elsewhere : )
What follows are my notes trying to narrow it down, as an org document.
~~~~START~~~~
* General
There seems to be an issue with returning multiple values, which result from =:var= variables / whose computation involves =:var= variables. Handling multiple trivial values like ~1~ or ~2~ seems to work fine.
* Primitive multiple values work
#+begin_src scheme :eval query-export :results output replace drawer
(import (except (rnrs base) error vector-map)
(only (guile)
lambda*
λ)
;; let-values
(srfi srfi-11))
(let-values ([(a b) (values 1 2)])
(simple-format #t "~a ~a\n" a b))
#+end_src
#+RESULTS:
:results:
1 2
:end:
* Multiple values involving =:var= variables
#+begin_src scheme :eval query-export :results output replace drawer :var x=1 :var y=2
(import (except (rnrs base) error vector-map)
(only (guile)
lambda*
λ)
;; let-values
(srfi srfi-11))
(let-values ([(a b) (values x y)])
(simple-format #t "~a ~a\n" a b))
#+end_src
#+RESULTS:
:results:
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Unbound variable: a
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
:end:
** Is it about =:var= variables in values?
#+begin_src scheme :eval query-export :results output replace drawer :var x=1 :var y=2
(import (except (rnrs base) error vector-map)
(only (guile)
lambda*
λ)
;; let-values
(srfi srfi-11))
(define plus-x
(λ (num)
(+ num x)))
(define plus-y
(λ (num)
(+ num y)))
(let-values ([(a b) (values (plus-x 1) (plus-y 2))])
(simple-format #t "~a ~a\n" a b))
#+end_src
#+RESULTS:
:results:
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Unbound variable: a
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
:end:
** Defining and using defined variables
What about defining and using the defined variables instead of the =:var= variables directly?
#+begin_src scheme :eval query-export :results output replace drawer :var x=1 :var y=2
(import (except (rnrs base) error vector-map)
(only (guile)
lambda*
λ)
;; let-values
(srfi srfi-11))
(define inner-x x)
(define inner-y y)
(define plus-x
(λ (num)
(+ num inner-x)))
(define plus-y
(λ (num)
(+ num inner-y)))
(let-values ([(a b) (values (plus-x 1) (plus-y 2))])
(simple-format #t "~a ~a\n" a b))
#+end_src
#+RESULTS:
:results:
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Unbound variable: a
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
:end:
It seems not to work whenever the ~(values ...)~ is not only trivial values, but variables or function calls.
* With named :session
Works after running it once with error:
#+begin_src scheme :session mysession :eval query-export :results output replace drawer :var x=1 :var y=2
(import (except (rnrs base) error vector-map)
(only (guile)
lambda*
λ)
;; let-values
(srfi srfi-11))
(let-values ([(a b) (values x y)])
(simple-format #t "~a ~a\n" a b))
#+end_src
#+RESULTS:
:results:
1 2
:end:
Seems like it gets stored in the session and then can be used in the second run of the source block.
~~~~~END~~~~~
Versions of things:
+ guile @ =3.0.9=
+ org-mode @ =9.6.1=
+ org-babel @ (integrated into org-mode)
+ geiser-guile @ =0.28.1=
Workarounds:
Of course, I could return lists instead of multiple values and then pattern
match on them or use separate functions for getting the values separately.
Downside: Might be more computation and requires changing code just, because for
using it in org source blocks.
--
repositories:https://notabug.org/ZelphirKaltstahl
[-- Attachment #2: Type: text/html, Size: 4888 bytes --]
next reply other threads:[~2023-03-07 11:28 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-07 11:27 Zelphir Kaltstahl [this message]
2023-03-07 14:36 ` org-babel guile source block bug in handling multiple values Ihor Radchenko
2023-03-07 15:18 ` Zelphir Kaltstahl
2023-03-07 19:52 ` Bruno Barbier
2023-03-08 0:55 ` Zelphir Kaltstahl
2023-03-08 19:38 ` Bruno Barbier
2023-03-09 0:44 ` Zelphir Kaltstahl
2023-03-09 13:04 ` [BUG] Inconsistent global/local :var assignments in ob-* for lisps and non-lisps (was: org-babel guile source block bug in handling multiple values) Ihor Radchenko
2023-03-10 10:39 ` Zelphir Kaltstahl
2023-03-11 9:58 ` Ihor Radchenko
2023-03-11 18:30 ` Zelphir Kaltstahl
2023-03-12 11:33 ` Ihor Radchenko
2023-03-19 13:50 ` [PATCH] lisp/ob-scheme.el Zelphir Kaltstahl
2023-03-22 10:43 ` Ihor Radchenko
2023-03-25 14:34 ` Zelphir Kaltstahl
2023-03-26 9:32 ` Ihor Radchenko
2023-04-25 12:28 ` Ihor Radchenko
2023-04-29 11:08 ` Zelphir Kaltstahl
2023-03-09 13:10 ` org-babel guile source block bug in handling multiple values Ihor Radchenko
2023-03-10 10:42 ` Zelphir Kaltstahl
2023-03-11 10:18 ` Ihor Radchenko
2023-06-02 13:11 ` Ihor Radchenko
2023-03-09 13:11 ` Ihor Radchenko
2023-03-09 14:21 ` Daniel Kraus
2023-03-10 11:57 ` Ihor Radchenko
2023-03-10 10:45 ` Zelphir Kaltstahl
2023-03-08 1:13 ` Zelphir Kaltstahl
2023-03-08 8:55 ` Ihor Radchenko
2023-03-07 15:44 ` Max Nikulin
2023-03-07 21:41 ` Rudolf Adamkovič
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9eab60bc-9b82-e037-d63b-3d879573ae32@posteo.de \
--to=zelphirkaltstahl@posteo.de \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).