PocketML is not opinionated when it comes to project structure. All default libraries are in lib/
.
You can also write bigger chunks of code on your pc for testing and then transfer them. Connect your phone via USB and open the folder Internal Storage/Android/data/org.test.myapp/files/
.
PocketML is compiled to python. It
has access to all features of python and the
libraries numpy
, pygments
, lark
, and kivy
.
Python code can be included in PocketML code using
%%% ... %%%
. PocketML uses the PML_[varname]
naming scheme internally. Python functions exported to PocketML should be named accordingly.
%%%
def half(x):
return x / 2
PML_half = half
%%%;
let half : Number -> Number;
print (half 2)
Python code can also be used to compute values
in PocketML code using the inline %% ... %%
syntax.
Python types are largely compatible with PocketML types.
print %%f"PocketML does not have f-strings but python does {'!'*10}"%%
Another example:
import lib.std;
# get name and greet!
input "Name:" (\nm -> print %%f"Hi, {PML_nm}!"%%)
As discussed in the Language Guide on records, one can also build a function with default arguments using python interop:
let mkVec : { x : Number, y : Number, z : Number } -> Vec;
%%%
def PML_mkVec(r):
defaults = {"x":0,"y":0,"z":0}
defaults.update(r)
return np.array(list(defaults.values()))
%%%;
print $ mkVec {y=20} # => [ 0 20 0]
The PocketML editor is accessible to the language by using python interop.
The editor object can be accessed directly by the name editor
. It contains the “terminalout”
and “graphicalout” objects.
%%%
def cls(_):
# example usage:
# clear the terminal
editor.terminalout.text = ""
%%%;
()
editor.graphicalout
is the kivy object for the “Graphics” tab in the editor and can be added to / manipulated like any other kivy object.
For a better insight into accessing the graphicalout object from code,
refer to the tea.ml
library.