This repository has been archived by the owner on Aug 2, 2024. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Lots of remaining questions like
Is this the best way to implement built-in rules?
Does built-in rules need to return more constraints? i.e. currently in the temporary "rule" constructed the body is always empty.
Should any built-in rules "leave" any variables ungrounded at all? i.e. currently string_concat always return literal of the form string_concat(C, C, C) where C are constants. Will this be the case for all built in rules? If so then maybe we could just have
builtin.apply
return a vec of constants, instead of terms (and thus introducing the possibility of variable collision, unless special care is taken to only return aux or input variables).How should the application of built-in rules be reflected in the tree? i.e. currently it's just
(maybe just have every relevant variables in the clause? i.e.
clause: Builtin("run", vec![Term::Constant("apt install python")])
)