1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-04-09 16:40:38 +00:00

Simply predicate evaluation

This commit is contained in:
David Schmenk 2024-07-07 15:35:42 -07:00
parent 2fecde9a7a
commit a63fed59c9

View File

@ -351,7 +351,11 @@ end
//
def is_int(c); return c >= '0' and c <= '9'; end
def is_alphasym(c); c=toupper(c); return c >= '*' and c <= 'Z' and c <> '.'; end
def is_alphasym(c)
c=toupper(c)
return c >= '*' and c <= 'Z' and c <> '.'
end
def parse_int(evalptr)#2 // return evalptr, intptr
var int[2]
@ -536,12 +540,16 @@ end
// Base native functions
//
def eval_pred(bool)
return bool ?? @pred_true :: @pred_false
end
def natv_atom(atom)
return !atom or atom->type <> CONS_TYPE ?? @pred_true :: @pred_false
return eval_pred(!atom or atom->type <> CONS_TYPE)
end
def natv_eq(expr)
return eval_expr(expr=>car) == eval_expr(expr=>cdr=>car) ?? @pred_true :: @pred_false
return eval_pred(eval_expr(expr=>car) == eval_expr(expr=>cdr=>car))
end
def natv_cons(expr)
@ -579,7 +587,7 @@ def natv_null(expr)
var result
result = eval_expr(expr=>car)
return !result or !result->type ?? @pred_true :: @pred_false
return eval_pred(!result or !result->type)
end
def natv_label(expr)
@ -701,7 +709,7 @@ def natv_gt(expr)
num[0], num[1] = eval_num(expr)
load32(@num)
num[0], num[1] = eval_num(expr=>cdr)
return isgt32(@num) ?? @pred_true :: @pred_false
return eval_pred(isgt32(@num))
end
def natv_lt(expr)
@ -710,7 +718,7 @@ def natv_lt(expr)
num[0], num[1] = eval_num(expr)
load32(@num)
num[0], num[1] = eval_num(expr=>cdr)
return islt32(@num) ?? @pred_true :: @pred_false
return eval_pred(islt32(@num))
end
def natv_print(expr)