From 02a489323a8d60161acd308e6485b9500496086e Mon Sep 17 00:00:00 2001 From: Patrick Hammer Date: Mon, 13 Apr 2026 13:10:50 +0200 Subject: [PATCH] Easier tabling support usage --- examples/tabling_fib.metta | 10 ++++++++++ lib/lib_tabling.metta | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 examples/tabling_fib.metta create mode 100644 lib/lib_tabling.metta diff --git a/examples/tabling_fib.metta b/examples/tabling_fib.metta new file mode 100644 index 00000000..5747ecd6 --- /dev/null +++ b/examples/tabling_fib.metta @@ -0,0 +1,10 @@ +!(import! &self (library lib_tabling)) + +!(tabled (fib $N)) +(= (fib $N) + (if (< $N 2) + $N + (+ (fib (- $N 1)) + (fib (- $N 2))))) + +!(test (fib 30) 832040) diff --git a/lib/lib_tabling.metta b/lib/lib_tabling.metta new file mode 100644 index 00000000..c680f4c9 --- /dev/null +++ b/lib/lib_tabling.metta @@ -0,0 +1,11 @@ +(= (injectPrologCode $code) + (progn (translatePredicate (open_string $code $S)) + (translatePredicate (load_files user ((Predicate (stream $S))))) + True)) + +(: tabled (-> Expression Atom)) +(= (tabled $call) + (progn (translatePredicate (atom_string (car-atom $call) $strname)) + (translatePredicate (atom_string (+ 1 (length (cdr-atom $call))) $strarity)) + (translatePredicate (atomics_to_string (":- table " $strname "/" $strarity ".") $code)) + (injectPrologCode $code)))