diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-10-24 16:54:31 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-10-24 16:54:31 -0300 |
| commit | 4f2bfb990d088f1f3eccad2626f28fe155f27047 (patch) | |
| tree | 0462744c62fab6c380d19324325e8ca67c3446af /subsystem/karuta/rnt.lfe | |
| parent | 7f48fa65f314f0105276689a0d708929106fe392 (diff) | |
| download | RNT-4f2bfb990d088f1f3eccad2626f28fe155f27047.tar.gz RNT-4f2bfb990d088f1f3eccad2626f28fe155f27047.zip | |
lfe with a beam evaluator for karuta
Diffstat (limited to 'subsystem/karuta/rnt.lfe')
| -rw-r--r-- | subsystem/karuta/rnt.lfe | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/subsystem/karuta/rnt.lfe b/subsystem/karuta/rnt.lfe new file mode 100644 index 0000000..dc0fbb7 --- /dev/null +++ b/subsystem/karuta/rnt.lfe @@ -0,0 +1,26 @@ +;; Tuples of an RNT relation, as Translator.ml writes and reads them: a +;; tuple is #(Type #m(Name Value ...)), its type, names and strings +;; binaries, and its integers no wider than an OCaml int. +(defmodule rnt + (export (recv 1) (send 1))) + +;; A tuple from the bytes RNT sent. +(defun recv (bytes) (holdable (binary_to_term bytes '(safe)))) + +;; The bytes RNT reads a tuple from. +(defun send (tuple) (term_to_binary (holdable tuple))) + +;; The tuple, if RNT can hold it. +(defun holdable + (((= (tuple type attributes) tuple)) (when (is_binary type) (is_map attributes)) + (if (lists:all (fun attribute? 1) (maps:to_list attributes)) + tuple + (error 'badarg (list tuple)))) + ((tuple) (error 'badarg (list tuple)))) + +(defun attribute? + (((tuple name value)) (when (is_binary name) (is_binary value)) 'true) + (((tuple name value)) + (when (is_binary name) (is_integer value) (>= value (- (bsl 1 62))) (< value (bsl 1 62))) + 'true) + ((_) 'false)) |
