Head & Tail

新的headtail函数定义如下。可以明显的看到在使用宏后,代码更清晰了。

  1. lval* builtin_head(lval* a) {
  2. LASSERT(a, a->count == 1,
  3. "Function 'head' passed too many arguments!");
  4. LASSERT(a, a->cell[0]->type == LVAL_QEXPR,
  5. "Function 'head' passed incorrect type!");
  6. LASSERT(a, a->cell[0]->count != 0,
  7. "Function 'head' passed {}!");
  8. lval* v = lval_take(a, 0);
  9. while (v->count > 1) { lval_del(lval_pop(v, 1)); }
  10. return v;
  11. }
  12. lval* builtin_tail(lval* a) {
  13. LASSERT(a, a->count == 1,
  14. "Function 'tail' passed too many arguments!");
  15. LASSERT(a, a->cell[0]->type == LVAL_QEXPR,
  16. "Function 'tail' passed incorrect type!");
  17. LASSERT(a, a->cell[0]->count != 0,
  18. "Function 'tail' passed {}!");
  19. lval* v = lval_take(a, 0);
  20. lval_del(lval_pop(v, 0));
  21. return v;
  22. }