1: $cppawk ' #include function f() { return ++count } BEGIN { print prog(f(), f(), f(), f()) print progn(f(), f(), f(), f()) print prog(f()) print progn(f()) print count }' : 1 8 1 10 10 -- 2: $cppawk ' #include function f() { return ++count } BEGIN { print and(f(), f(), f(), f()) print count print and(f()) print count print and(0, f()) print count print and("", f()) print count print and(1, f(), "abc") print count print and(0) print and(3) }' : 4 4 5 5 0 5 5 abc 6 0 3 -- 3: $cppawk ' #include function f() { count++ return 0 } BEGIN { print or(f(), f(), f(), f()) print count print or(f()) print count print or(1, f()) print count print or(0, "", "abc", f()) print count print or("") print or(0) }' : 0 4 0 5 1 5 abc 5 0 -- 4: $cppawk ' #include BEGIN { print nil == "" print nil == 0 }' : 1 0 -- 5: $cppawk ' #include BEGIN { print consp(nil), consp("abc"), consp(cons(1, 2)), consp(3) print consp(undef), consp(box_sym("x")), consp(box(undef)), consp(box("abc")) print atom(nil), atom("abc"), atom(cons(1, 2)), atom(3) print atom(undef), atom(box_sym("x")), atom(box(undef)), atom(box("abc")) print null(nil), null("abc"), null(cons(1, 2)), null(3) print null(undef), null(box_sym("x")), null(box(undef)), null(box("abc")) }' : 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 -- 6: $cppawk ' #include BEGIN { endp(3) }' : ERR -- 7: $cppawk ' #include BEGIN { endp(undef) }' : ERR -- 8: $cppawk ' #include BEGIN { print endp(nil), endp(cons(1, 2)) }' : 1 0 -- 9: $cppawk ' #include BEGIN { print numberp(undef), numberp(nil), numberp("abc"), numberp(0) print numberp("123x"), numberp(cons(1, 2)), numberp(box_sym("1abc")) }' : 0 0 0 1 1 0 0 -- 10: $cppawk ' #include BEGIN { print stringp(undef), stringp(nil), stringp("abc"), stringp(0) print stringp(cons(1, 2)), stringp(box("abc")), stringp(box("1")) }' : 0 0 0 0 0 1 0 -- 11: $cppawk ' #include BEGIN { print symbolp(undef), symbolp(nil), symbolp("abc"), symbolp(0) print symbolp(cons(1, 2)), symbolp(box("abc")), symbolp(box_sym("1")) }' : 0 1 0 0 0 0 1 -- 12: $cppawk ' #include BEGIN { print box(1), box("1a"), box(0), box(-1.34) print box(undef), box(""), box("abc") }' : 1 1a 0 -1.34 U T Tabc -- 13: for expr in undef 'cons(1, 1)' '""' 0; do $cppawk "#include BEGIN { print unbox($expr) }" || echo fail done : unbox: missing or undefined argument fail unbox: C1,1:11 looks like a cons fail nil 0 -- 14: $cppawk ' #include BEGIN { print unbox(box(1)), unbox(box("1a")), unbox(box(0)), unbox(box(-1.34)) print "X" unbox(box("")) "Y", unbox(box("abc")) print unbox(nil), unbox("Sabc") }' : 1 1a 0 -1.34 XY abc nil abc -- 15: $cppawk ' #include BEGIN { print box_sym(undef), box_sym(1), box_sym("1a"), box_sym(0), box_sym(-1.34) print "A" box_sym("nil") "B", box_sym("abc"), box_sym("()") print box_str(undef), box_str(1), box_str("1a"), box_str(0), box_str(-1.34) print "A" box_str("nil") "B", box_str("abc"), box_str("()") }' : S S1 S1a S0 S-1.34 AB Sabc S() T T1 T1a T0 T-1.34 ATnilB Tabc T() -- 16: $cppawk ' #include BEGIN { print cons(undef, undef), cons(box(undef), box(undef)), cons(nil, nil), cons(1, 2) print cons("()xz$3%", "5#d_@") }' : C0,0: C1,1:UU C0,0: C1,1:12 C7,5:()xz$3%5#d_@ -- 17: $cppawk ' #include BEGIN { c = cons("()xz$3%", "5#d_@") print car(c), cdr(c) }' : ()xz$3% 5#d_@ -- 18: for expr in 'box_sym("abc")' 'box("abc")' '1' '0' \ 'undef' '"C"' '"C1"' '"C1,2"' '"C1,1:"' do $cppawk "#include BEGIN { print car($expr) }" || echo fail done : car: Sabc isn't a cons fail car: Tabc isn't a cons fail car: 1 isn't a cons fail car: 0 isn't a cons fail car: isn't a cons fail car: C has a malformed cons header fail car: C1 has a malformed cons header fail car: C1,2 has a malformed cons header fail -- 19: for expr in 'box_sym("abc")' 'box("abc")' '1' '0' \ 'undef' '"C"' '"C1"' '"C1,2"' '"C1,1:"' do $cppawk "#include BEGIN { print cdr($expr) }" || echo fail done : cdr: Sabc isn't a cons fail cdr: Tabc isn't a cons fail cdr: 1 isn't a cons fail cdr: 0 isn't a cons fail cdr: isn't a cons fail cdr: C has a malformed cons header fail cdr: C1 has a malformed cons header fail cdr: C1,2 has a malformed cons header fail -- 20: $cppawk ' #include #define a(x) car(cons(x, nil)) #define d(x) cdr(cons(nil, x)) BEGIN { print "A" a(undef) "B", "A" a("") "B", a(0), a(1), a(cons(1, 2)), a(box("a")) print "A" d(undef) "B", "A" d("") "B", d(0), d(1), d(cons(1, 2)), d(box("a")) }' : AB AB 0 1 C1,1:12 Ta AB AB 0 1 C1,1:12 Ta -- 21: $cppawk ' #include BEGIN { print sexp(undef) } : ERR -- 22: $cppawk ' #include BEGIN { print sexp(nil), sexp(0), sexp(1), sexp(-1.3), sexp("abc"), sexp("a\"bc") print sexp("Sabc"), sexp("Tabc"), sexp("U") print sexp(cons(1, 2)), sexp(cons(1, nil)), sexp(cons(1, cons(2, 3))) print sexp(cons(cons(1, nil), cons(cons(2 , 3), cons(4, cons(5 , nil))))) }' : nil 0 1 -1.3 "abc" "a\"bc" abc "abc" #U (1 . 2) (1) (1 2 . 3) ((1) (2 . 3) 4 5) -- 23: $cppawk ' #include BEGIN { print equal("", undef), equal(0, 0), equal(-1, -1), equal("", "") print equal("", "a"), equal(0, 1), equal(-1, 1), equal("Tabc", "xyz") print equal("1", "1.0"), equal(box("abc"), "abc") print equal(box(undef), box(undef)) print equal(cons("1", "2"), cons("1.0", "2.0")) print equal(cons("1", "3"), cons("1.0", "2.0")) print equal(cons("3", "2"), cons("1.0", "2.0")) print equal(cons("1a", "2a"), cons("1b", "2b")) print "brk" print equal(box_str(1.0), 1.0) print equal(box_str(1.0), box_str("1")) print equal(box_str(1.0), box_str(1.0)) print equal(box_str(1.0), "1.0") print equal("1.0", box_str(1.0)) }' : 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 brk 0 1 1 0 0 -- 24: $cppawk ' #include function same(left, right) { return equalize(left) == equalize(right) } BEGIN { print same("", undef), same(0, 0), same(-1, -1), same("", "") print same("", "a"), same(0, 1), same(-1, 1), same("Tabc", "xyz") print same("1", "1.0"), same(box("abc"), "abc") print same(box(undef), box(undef)) print same(cons("1", "2"), cons("1.0", "2.0")) print same(cons("1", "3"), cons("1.0", "2.0")) print same(cons("3", "2"), cons("1.0", "2.0")) print same(cons("1a", "2a"), cons("1b", "2b")) print "brk" print same(box_str(1.0), 1.0) print same(box_str(1.0), box_str("1")) print same(box_str(1.0), box_str(1.0)) print same(box_str(1.0), "1.0") print same("1.0", box_str(1.0)) }' : 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 brk 0 1 1 0 0 -- 25: $cppawk ' #include BEGIN { print sexp(list()) print sexp(list(1)) print sexp(list(1, 2)) print sexp(list(1, 2, 3)) print sexp(list(1, 2, 3, 4)) print sexp(list(1, 2, 3, 4, 5)) print sexp(list(1, 2, 3, 4, 5, 6)) print sexp(list(1, 2, 3, 4, 5, 6, 7)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)) print sexp(list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32)) print sexp(list(list(list(1, 2), list(3, 4)), list(list(5, 6), list(7, 8)))) }' : nil (1) (1 2) (1 2 3) (1 2 3 4) (1 2 3 4 5) (1 2 3 4 5 6) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7 8) (1 2 3 4 5 6 7 8 9) (1 2 3 4 5 6 7 8 9 10) (1 2 3 4 5 6 7 8 9 10 11) (1 2 3 4 5 6 7 8 9 10 11 12) (1 2 3 4 5 6 7 8 9 10 11 12 13) (1 2 3 4 5 6 7 8 9 10 11 12 13 14) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32) (((1 2) (3 4)) ((5 6) (7 8))) -- 26: $cppawk ' #include BEGIN { list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33) }' : ERR -- 27: $cppawk ' #include BEGIN { print sexp(append()) print sexp(append(nil)) print sexp(append(1)) print sexp(append(list(1), 1)) print sexp(append(list(1), list(2), 3)) print sexp(append(list(1, 2), list(3, 4), list(5, 6, 7))) }' : nil nil 1 (1 . 1) (1 2 . 3) (1 2 3 4 5 6 7) -- 28: $cppawk ' #include BEGIN { print append(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) }' : ERR -- 29: $cppawk ' #include BEGIN { print append(1, 2) }' : ERR -- 30: $cppawk --prepro-only ' #include li(1) li(1, 2) li(1, 2, 3) listar(1) listar(1, 2) listar(1, 2, 3) ' | $cppawk '/^__cons/,0' : __cons(1, "") __cons(1, __cons(2, "")) __cons(1, __cons(2, __cons(3, ""))) 1 __cons(1, 2) __cons(1, __cons(2, 3)) -- 31: $cppawk ' #include BEGIN { print sexp(member(1, list(1, 2, 3))) print sexp(member(2, list(1, 2, 3))) print sexp(member(3, list(1, 2, 3))) print sexp(member(4, list(1, 2, 3))) print sexp(member(1, nil)) print sexp(member(nil, nil)) }' : (1 2 3) (2 3) (3) nil nil nil -- 32: $cppawk ' #include BEGIN { print sexp(position(1, list(1, 2, 3))) print sexp(position(2, list(1, 2, 3))) print sexp(position(3, list(1, 2, 3))) print sexp(position(4, list(1, 2, 3))) print sexp(position(1, nil)) print sexp(position(nil, nil)) }' : 0 1 2 nil nil nil -- 33: $cppawk ' #include BEGIN { print sexp(nth(-1, list(1, 2, 3))) print sexp(nth(1, list(1, 2, 3))) print sexp(nth(15, list(1, 2, 3))) print sexp(nthcdr(0, list(1, 2, 3))) print sexp(nthcdr(2, list(1, 2, 3))) print sexp(nthcdr(-1, list(1, 2, 3))) }' : nil 2 nil (1 2 3) (3) (1 2 3) -- 34: $cppawk ' #include BEGIN { print sexp(ldiff(list(1, 2, 3, 4), list(3, 4))) print sexp(ldiff(list(1, 2, 3, 4), list(1, 2, 3, 4))) print sexp(ldiff(list(1, 2, 3, 4), list(4))) print sexp(ldiff(list(1, 2, 3, 4), list(5, 6))) print sexp(ldiff(list(1, 2, 3, 4), "abc")) print sexp(ldiff(cons(1, cons(2, 3)), 3)) print sexp(last(list(1, 2, 3))) print sexp(last(list(1, 2, 3), 2)) print sexp(last(cons(1, cons(2, 3)), 0)) print sexp(butlast(list(1, 2, 3), 2)) print sexp(butlast(list(1, 2, 3), 15)) }' : (1 2) nil (1 2 3) (1 2 3 4) (1 2 3 4) (1 2) (3) (2 3) 3 (1) nil -- 35: $cppawk ' #include BEGIN { print sexp(iota(1, 1)) print sexp(iota(1, 3)) print sexp(iota(1, -1)) print sexp(iota(1, 3, 0.25)) print sexp(iota(3, 1, -0.25)) print sexp(iota(1, 3, -1)) print sexp(iota(2.5, 2.5, 0)) print sexp(iota(2.5, 2.5, -1)) }' : (1) (1 2 3) (1 0 -1) (1 1.25 1.5 1.75 2 2.25 2.5 2.75 3) (3 2.75 2.5 2.25 2 1.75 1.5 1.25 1) nil (2.5) (2.5) -- 36: $cppawk ' #include BEGIN { print sexp(uniq(nil)) print sexp(uniq(list(1, 2, 1, 3, 2, 4, 2, 1, 5, 6, 5))) print sexp(uniqual(nil)) print sexp(uniqual(list(1, 2, 1, 3, 2, 4, 2, 1, 5, 6, 5))) print sexp(uniq(list(1, 1.0))) print sexp(uniq(list(1, "1.0"))) print sexp(uniqual(list(1, 1.0))) print sexp(uniqual(list(1, "1.0"))) print sexp(uniq(list(box_str("abc"), "abc"))) print sexp(uniqual(list(box_str("abc"), "abc"))) print sexp(uniq(list(cons(1, 2), cons(3, 4), cons(1, 2), cons(3, 5)))) }' : nil (1 2 3 4 5 6) nil (1 2 3 4 5 6) (1) (1 1.0) (1) (1) ("abc" "abc") ("abc") ((1 . 2) (3 . 4) (3 . 5)) -- 37: $cppawk ' #include #include function sq (x) { return sqrt(x) } BEGIN { print sexp(mapcar(fun(42), nil)) print sexp(mapcar(bind(cons, "x"), list(1, 2, 3))) print sexp(mappend(fun(42), nil)) print sexp(mappend(bind(list, "x"), list(1, 2, 3))) print sexp(mapcar(fun(sq), list(0, 1, 4, 9, 16, 25))) }' : nil (("x" . 1) ("x" . 2) ("x" . 3)) nil ("x" 1 "x" 2 "x" 3) (0 1 2 3 4 5) -- 38: $cppawk ' #include #include function cs(x) { return cox(x) } BEGIN { print sexp(mappend(fun(cs), list(0.2, 0.2, 0.3))) }' : ERR -- 39: $cppawk ' #include BEGIN { split("a:b:c", a, /:/) print sexp(values(a)) print sexp(keys(a)) }' : ("a" "b" "c") (1 2 3) -- 40: $cppawk ' #include BEGIN { $0 = "the quick brown fox" print sexp(fields()) set_fields(list(1, cons(1, 2), "foo", box_str("foo"))) for (i = 1; i <= NF; i++) print $i }' : ("the" "quick" "brown" "fox") 1 C1,1:12 foo Tfoo -- 41: $cppawk ' #include BEGIN { dolist (x, list(1, 2, 3)) print x print x dolisti (x, i, list(1, 2, 3)) print x, i doconses (s, listar(1, 2, 3, 4)) print sexp(s) }' : 1 2 3 3 1 0 2 1 3 2 (1 2 3 . 4) (2 3 . 4) (3 . 4) -- 42: $cppawk ' #include function rev(li, out) { out = nil while (!endp(li)) push(pop(li), out) return out } BEGIN { print sexp(rev(list(1, 2, 3))); x = nil print sexp(pop(x)) x = cons(3, 4) print sexp(pop(x)) print x }' : (3 2 1) nil 3 4 -- 43: $cppawk ' #include BEGIN { bag = list_begin() print sexp(list_end(bag)) print sexp(list_end_atom(bag, 3)) bag = list_add(bag, "a") bag = list_add(bag, 1) bag = list_add(bag, 2) print sexp(list_end(bag)) print sexp(list_end_atom(bag, 3)) }' : nil 3 ("a" 1 2) ("a" 1 2 . 3) -- 44: $cppawk ' #include BEGIN { bags (vals, squares, sums) { acc = 0 for (i = 0; i < 5; i++) { bag (vals, i) bag (squares, i*i) bag (sums, acc += i) } } // the bags variables are now print sexp(vals) print sexp(squares) print sexp(sums) }' : (0 1 2 3 4) (0 1 4 9 16) (0 1 3 6 10)