Stdlib completion effort - trueagi-io/PeTTa GitHub Wiki

Copied from https://github.com/tezena/PeTTa-and-MeTTa-comparisons/blob/main/README.md, thank you @tezena and @hal-29

There will be fast iteration in the coming days to complete and correct Stdlib.

MeTTa vs PeTTa interpreter comparison and observations

No Test Case H-E PeTTa Observations
1 !(bind! A B) ✅ ⚠️ For space and states but not general atom binding
2 !(union-atom (1 2) (3 4)) ✅ ✅ Works on both
3 !(cons-atom 0 (1 2 3)) ✅ ✅ Works on both
4 !(intersection-atom (1 2) (3 4)) ✅ ✅ Works on both
5 !(car-atom (1 2 3)) ✅ ✅ Works on both
6 !(cdr-atom (1 2 3)) ✅ ✅ Works on both
7 !(superpose (1 2 3)) ✅ ✅ Works on both
8 !(collapse (superpose(1 2 3))) ✅ ✅ Works on both
9 !(index-atom (1 2 3) 1) ✅ ✅ Works on both
10 !(size-atom (1 2 3)) ✅ ✅ Works on both
11 !(sort-atom (3 1 4 2 3)) ❌ ✅ Works only on PeTTa

Extended built-ins coverage

Below are additional built-ins tested from the MeTTa stdlib pages. Each row shows whether it worked under MeTTa and PeTTa in this workspace, plus a brief note. Tests live alongside this document as .metta files named tests_*.metta.

Equality and Reduction

No Test Case H-E PeTTa Observations
10 (= (add 1 2) 3) ✅ ✅ Works on both
11 !(id 5) ✅ ✅ Works on both
12 !(=alpha (Father $X) (Father $Y)) ✅ ✅ Works on both
13 !(=alpha (Father $X) (Son $X)) ✅ ✅ Works on both
14 !(if-equal 1 1 "Equal" "Not Equal") ✅ ✅ Works via !(import! &self lib_he)

Assertions

No Test Case H-E PeTTa Observations
15 !(assertEqual (+ 1 2) (- 6 3)) ✅ ✅ Works via !(import! &self lib_he)
16 !(assertAlphaEqual (h $x $y) (h $a $b)) ✅ ✅ Works via !(import! &self lib_he)
16 !(assertAlphaEqual (+ $x $y) (+ $a $b)) ✅ ⚠️ Needs !(import! &self lib_he) but with quote since + does not typecheck for performance reasons.
17 !(assertEqualToResult (+ 1 2) 3) ✅ ❌ MeTTa implementation anyone?
18 !(assertAlphaEqualToResult (adder) ($y)) with (= (adder) $x) ✅ ❌ MeTTa implementation anyone?

Error Handling

No Test Case H-E PeTTa Observations
19 !(Error (add "a" 2) BadType) ✅ ✅ Works in both, but for an expression to return an error instead of returning (empty) it must use catch, e.g. (catch (+ a 2)).
20 !(if-error (Error 5 BadType) "Error!" "No error") ✅ ✅ Works via !(import! &self lib_he)
21 !(return-on-error (Error 5 BadType) 6) ✅ ✅ Works via !(import! &self lib_he)

Evaluation Control

No Test Case H-E PeTTa Observations
22 !(function (return 5)) ✅ ❌ Not planned.
23 !(eval (double 5)) with (= (double $x) (+ $x $x)) ✅ ✅ Works in both
24 !(evalc (+ 5 5) &self) ✅ ✅ Works via !(import! &self lib_he)
25 !(chain (+ 2 3) $x (* $x 2)) ✅ ✅ Works in both
26 !(for-each-in-atom (1 3 5 62 2 5) println!) ✅ ✅ Works via !(import! &self lib_he)

Mathematical Operations

No Test Case H-E PeTTa Observations
27 !(pow-math 2 3) ✅ ✅ Works on both
28 !(sqrt-math 9) ✅ ✅ Works on both
29 !(abs-math -5) ✅ ✅ Works on both
30 !(log-math 10 100) ✅ ✅ Works on both
31 !(trunc-math 5.6) ✅ ✅ Works on both
32 !(ceil-math 5.2) ✅ ✅ Works on both
33 !(floor-math 5.8) ✅ ✅ Works on both
34 !(round-math 5.4) ✅ ✅ Works on both
35 !(round-math 5.6) ✅ ✅ Works on both
36 !(sin-math 0) ✅ ✅ Works on both
37 !(asin-math 0) ✅ ✅ Works on both
38 !(cos-math 0) ✅ ✅ Works on both
39 !(acos-math 1) ✅ ✅ Works on both
40 !(tan-math 0) ✅ ✅ Works on both
41 !(atan-math 0) ✅ ✅ Works on both
42 !(isnan-math 0.0) ✅ ✅ Works on both
43 !(isinf-math 0.0) ✅ ✅ Works on both
44 !(min-atom (2 6 7 4 9 3)) ✅ ✅ Works on both
45 !(max-atom (2 6 7 4 9 3)) ✅ ✅ Works on both

Non-deterministic Computation

No Test Case MeTTa PeTTa Observations
46 !(superpose (A B C)) ✅ ✅ Works on both
47 !(collapse (superpose (A B C))) ✅ ✅ Works on both

Type System

No Test Case H-E PeTTa Observations
48 !(is-function (-> Atom Atom)) ✅ ✅ Works via !(import! &self lib_he)
49 !(is-function Atom) ✅ ✅ Works via !(import! &self lib_he)
50 !(type-cast A type1 &self) with (: type1 Type) ✅ ❌ Not planned.
51 !(type-cast 1 type1 &self) ✅ ❌ Not planned.
52 !(match-types Atom Atom "Matched!" "Didn't match") ✅ ✅ Works via !(import! &self lib_he)
53 !(match-types Atom Number "Matched!" "Didn't match") ✅ ✅ Works via !(import! &self lib_he)
54 !(first-from-pair (A B)) ✅ ✅ Works on both
55 !(second-from-pair (A B)) ❌ ✅ Works only in PeTTa
55 !(match-type-or True Number Bool) ✅ ✅ Works via !(import! &self lib_he)

List Manipulation

No Test Case H-E PeTTa Observations
56 !(foldl-atom (1 2 3 4) 0 $acc $x (+ $acc $x)) ✅ ✅ Works on both
57 !(map-atom (1 2 3) $x (+ $x 1)) ✅ ✅ Works on both
58 !(filter-atom (1 2 3 4 5) $x (> $x 3)) ✅ ✅ Works on both
59 !(foldl-atom (1 2 3 4) 0 foldfunc) ❌ ✅ Works only on PeTTa
60 !(map-atom (1 2 3) mapfunc) ❌ ✅ Works only on PeTTa
61 !(filter-atom (1 2 3 4 5) filterfunc) ❌ ✅ Works only on PeTTa

Atomspace Interaction

No Test Case H-E PeTTa Observations
59 !(add-reduct &self (= (add) (+ 1 3))) ✅ ✅ Works via !(import! &self lib_he)
60 !(add-atom &self (= (add) (+ 1 3))) ✅ ✅ Works on both
61 !(get-type 1) ✅ ✅ Works in both
62 (: a A) then !(get-type-space &self a) ✅ ✅ Works via !(import! &self lib_he)
63 !(get-metatype True) ✅ ✅ Works on both
64 !(get-metatype (a b)) ✅ ✅ Works on both
65 !(new-space) ✅ ✅ Returns new space ref in MeTTa; PeTTa unevaluated yet new spaces can be manipulated nevertheless.
66 !(bind! state (new-state rest)) ✅ ✅ Works on both
67 !(change-state! state active) then !(get-state state) ✅ ✅ Works on both
68 !(get-atoms &self) ✅ ✅ Works on both
69 !(match &self (= (add) (+ $x $y)) $x) ✅ ✅ Works on both

Quoting

No Test Case H-E PeTTa Observations
70 !(quote (+ 1 2)) ✅ ✅ MeTTa returns (quote (+ 1 2)), PeTTa returns (+ 1 2) unreduced.
71 !(unquote (quote (+ 1 2))) ✅ ✅ Works via !(import! &self lib_he)
73 !(noreduce-eq (+ 1 2) (+ 1 2)) ✅ ✅ Works via !(import! &self lib_he)
74 !(noreduce-eq (+ 1 2) 3) ✅ ✅ Works via !(import! &self lib_he)

Set Operations

No Test Case H-E PeTTa Observations
75 !(unique (superpose (a b c d d))) ✅ ✅ Works on both
76 !(union (superpose (a b b c)) (superpose (b c c d))) ✅ ✅ Works on both
77 !(intersection (superpose (a b c c)) (superpose (b c c c d))) ✅ ✅ Works on both
78 !(subtraction (superpose (a b b c)) (superpose (b c c d))) ✅ ✅ Works on both
79 !(unique-atom (a b c d d)) ✅ ✅ Works on both
80 !(union-atom (a b b c) (b c c d)) ✅ ✅ Works on both
81 !(intersection-atom (a b c c) (b c c c d)) ✅ ✅ Works on both
82 !(subtraction-atom (a b b c) (b c c d)) ✅ ✅ Works on both