branch combinator.
This commit is contained in:
parent
21f99aac96
commit
c3e786aed9
|
|
@ -164,8 +164,7 @@ pop_any(JoyListPtr stack)
|
||||||
mpz_t *
|
mpz_t *
|
||||||
pop_int(JoyListPtr stack)
|
pop_int(JoyListPtr stack)
|
||||||
{
|
{
|
||||||
JoyList node;
|
JoyList node = pop_any(stack);
|
||||||
node = pop_any(stack);
|
|
||||||
switch (node->head->kind) {
|
switch (node->head->kind) {
|
||||||
case joyInt:
|
case joyInt:
|
||||||
return &(node->head->value.i);
|
return &(node->head->value.i);
|
||||||
|
|
@ -176,6 +175,23 @@ pop_int(JoyListPtr stack)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
pop_bool(JoyListPtr stack)
|
||||||
|
{
|
||||||
|
JoyList node = pop_any(stack);
|
||||||
|
/* TODO: Look for just the singletons? */
|
||||||
|
switch (node->head->kind) {
|
||||||
|
case joyTrue:
|
||||||
|
return 1;
|
||||||
|
case joyFalse:
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
printf("Not a Boolean.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
JoyList
|
JoyList
|
||||||
pop_list(JoyListPtr stack)
|
pop_list(JoyListPtr stack)
|
||||||
{
|
{
|
||||||
|
|
@ -536,13 +552,7 @@ cmp_joyfunc(JoyListPtr stack, JoyListPtr expression)
|
||||||
b = pop_int(stack);
|
b = pop_int(stack);
|
||||||
a = pop_int(stack);
|
a = pop_int(stack);
|
||||||
hmm = mpz_cmp(*a, *b);
|
hmm = mpz_cmp(*a, *b);
|
||||||
if (hmm > 0) {
|
push_quote(((hmm > 0) ? G : (hmm < 0) ? L : E), expression);
|
||||||
push_quote(G, expression);
|
|
||||||
} else if (hmm < 0) {
|
|
||||||
push_quote(L, expression);
|
|
||||||
} else {
|
|
||||||
push_quote(E, expression);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -553,7 +563,16 @@ i_joyfunc(JoyListPtr stack, JoyListPtr expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void branch(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
void
|
||||||
|
branch(JoyListPtr stack, JoyListPtr expression)
|
||||||
|
{
|
||||||
|
JoyList T, F;
|
||||||
|
T = pop_list_node(stack);
|
||||||
|
F = pop_list_node(stack);
|
||||||
|
push_quote((pop_bool(stack) ? T : F), expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void clear(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
void clear(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
||||||
void div_joyfunc(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
void div_joyfunc(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
||||||
void mod(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
void mod(JoyListPtr stack, JoyListPtr expression) {stack = expression;}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ cons
|
||||||
dip
|
dip
|
||||||
dup
|
dup
|
||||||
first
|
first
|
||||||
i
|
|
||||||
loop
|
loop
|
||||||
pop
|
pop
|
||||||
rest
|
rest
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue