MeTTa definitions of stdlib don't work in modules imported by import! function
vsbogd opened this issue · 2 comments
vsbogd commented
Code which uses MeTTa definitions of stdlib inside a module imported using import!
doesn't work:
Steps to reproduce
imported.metta
:
!(if True (println! imported-ok) (println! imported-nok))
import.metta
:
!(import! &m imported.metta)
!(if True (println! self-ok) (println! self-nok))
Run import.metta
Expected result
metta import.metta
imported-ok
self-ok
[()]
[()]
Actual result
imported-ok
imported-nok
self-ok
[()]
[()]
Root cause
Metta::new_loading_runner
creates an empty space but doesn't import stdlib into it while it gets all standard tokens. Thus all MeTTa definitions of the stdlib are not available for the interpreted code. It affects minimal MeTTa even more serious because interpreter itself is also part of the MeTTa stdlib code.
hyperon-experimental/lib/src/metta/runner/mod.rs
Lines 151 to 164 in 0c17c62
This should be fixed during work on #470
vsbogd commented
It is a blocker for minimal MeTTa work.