forked from mirrors/org-mode
44adc98505
unified concept of function calls. Previously LoB calls were not able to produce results in the buffer. These changes go some way to allowing them to do that. [There are still some bugs to deal with]. That meant changing org-babel.el so that there is a notion of the `source block name' for a LoB line, in order to construct a #+resname (currently I've made the name the same as the function call). I'm also slowly moving towards unifying the notion of `function calls' a bit more: I've changed the org-babel-lob-one-liner-regexp so that instead of a monolithic match it now matches first the function name, and second the function arguments in parentheses. org-babel-lob-get-info makes that match, and although it still concatenates them and returns the string, the two elements can be accessed immediately afterwards using match-string. So that situation is very similar to org-babel-get-src-block-name, whose job (in this branch) is also to parse the function *name* and the function *arguments*. In a few places in the code (esp. function names), I think the word `info' should be replaced with `call' or `function call', which I believe more accurately indicates what the `info' is: a function definition, together with bound arguments/references. The function call syntax, i.e. function-name(arg1=ref1), originally introduced for references (and thereby in LoB), and which I'm proposing we use throughout, raises the question of default arguments, and those being over-ridden by supplied arguments, as in e.g. python, and R.
50 lines
985 B
Org Mode
50 lines
985 B
Org Mode
#+title: The Library of Babel --- off-the-shelf functions for data analysis and plotting using org-babel
|
|
#+SEQ_TODO: TODO PROPOSED | DONE DEFERRED REJECTED
|
|
#+OPTIONS: H:3 num:nil toc:t
|
|
#+STARTUP: odd hideblocks
|
|
|
|
[[http://downlode.org/Etext/library_of_babel.html][Full text of the Borges short story]]
|
|
|
|
(setq lob (org-babel-lob-parse-buffer))
|
|
(setq x (gethash 'plot lob))
|
|
(hash-table-count lob)
|
|
(maphash (lambda (key val) (insert key)) lob)
|
|
|
|
|
|
* Plotting code
|
|
Plot column 2 (y axis) against column 1 (x axis). Columns 3 and beyond, if present, are ignored.
|
|
|
|
|
|
#+srcname: R-plot(data=R-plot-example-data)
|
|
#+begin_src R :session *R*
|
|
plot(data)
|
|
"R plot complete"
|
|
#+end_src
|
|
|
|
|
|
|
|
#+tblname: R-plot-example-data
|
|
| 1 | 2 |
|
|
| 2 | 4 |
|
|
| 3 | 9 |
|
|
| 4 | 16 |
|
|
| 5 | 25 |
|
|
|
|
#+lob: R-plot(data=R-plot-example-data)
|
|
|
|
|
|
|
|
#+tblname: XX
|
|
| 1 | 1 |
|
|
| 2 | .5 |
|
|
| 3 | .3333 |
|
|
| 4 | .25 |
|
|
| 5 | .2 |
|
|
| 6 | .1666 |
|
|
| 7 | 0.1428 |
|
|
|
|
#+srcname: python-identity(a=5)
|
|
#+begin_src python
|
|
a
|
|
#+end_src
|