static pic_value pic_bool_equal_p(pic_state *pic) { pic_value x, y; pic_get_args(pic, "oo", &x, &y); return pic_bool_value(pic_equal_p(pic, x, y)); }
bool pic_equal_p(pic_state *pic, pic_value x, pic_value y) { enum pic_tt type; if (pic_eqv_p(x, y)) return true; type = pic_type(x); if (type != pic_type(y)) return false; switch (type) { case PIC_TT_PAIR: return pic_equal_p(pic, pic_car(pic, x), pic_car(pic, y)) && pic_equal_p(pic, pic_cdr(pic, x), pic_cdr(pic, y)); default: return false; } }
static pic_value pic_macro_variable_eq_p(pic_state *pic) { size_t argc, i; pic_value *argv; pic_get_args(pic, "*", &argc, &argv); for (i = 0; i < argc; ++i) { if (! pic_var_p(argv[i])) { return pic_false_value(); } if (! pic_equal_p(pic, argv[i], argv[0])) { return pic_false_value(); } } return pic_true_value(); }