From f1ca8793e350c364d54c42b231701cf36cc0fc03 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Mon, 21 Nov 2022 15:36:06 -0500 Subject: [PATCH] Boolean comparison folds, monadic only --- src/builtins/fold.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/builtins/fold.c b/src/builtins/fold.c index 86c83ca3..e687498b 100644 --- a/src/builtins/fold.c +++ b/src/builtins/fold.c @@ -119,12 +119,16 @@ B fold_c1(Md1D* d, B x) { B f = d->f; u64* xp = bitarr_ptr(x); f64 r; switch (rtid) { default: goto base; - case n_add: r = bit_sum (xp, ia); break; - case n_sub: r = bit_diff(xp, ia); break; - case n_and: case n_mul: case n_floor: r = bit_has (xp, ia, 0) ^ 1; break; - case n_or: case n_ceil: r = bit_has (xp, ia, 1) ; break; - case n_ne: r = fold_ne (xp, ia) ; break; - case n_eq: r = fold_ne (xp, ia) ^ (1&~ia); break; + case n_add: r = bit_sum (xp, ia); break; + case n_sub: r = bit_diff(xp, ia); break; + case n_and: case n_mul: case n_floor: r = bit_has (xp, ia, 0) ^ 1; break; + case n_or: case n_ceil: r = bit_has (xp, ia, 1) ; break; + case n_ne: r = fold_ne (xp, ia) ; break; + case n_eq: r = fold_ne (xp, ia) ^ (1&~ia); break; + case n_lt: r = bit_find(xp, ia, 1) == ia-1; break; + case n_le: r = bit_find(xp, ia, 0) != ia-1; break; + case n_gt: r = bit_find(xp, ia, 0) & 1; break; + case n_ge: r =~bit_find(xp, ia, 1) & 1; break; } decG(x); return m_f64(r); }