cfrac(Field) = $a; cfrac(...Field Field Field) = cfrac($a add($b inv($c))); div(Field Field) = mul($a inv($b)); gcd(Rat):not@ord($a 0) = $a; gcd(Rat Rat):not@ord($a 0) = div($a den@div($b $a)); gcd(0 ...Rat):not@same(0 $b) = gcd($b); gcd(Rat ...Rat):not@ord(0 $a) = gcd(neg($a) $b); gcd(Rat Rat Rat ...Rat):not@ord($a 0) = gcd(gcd($a $b) $c $d); pow(Sing 1) = $a; pow(Sing Int):ord(2 $b):odd($b) = mul(pow(mul($a $a) mul(add($b -1) 1/2)) $a); pow(Sing Int):ord(2 $b):even($b) = pow(mul($a $a) mul($b 1/2)); pow(Field 0):not@zero($a) = mul($a inv($a)); pow(Field Int):ord($b -1) = inv(pow($a neg($b))); prod(Sing) = $a; prod(Sing Sing ...Sing) = prod(mul($a $b) $c); sub(Group Group) = add($a neg($b)); sum(Soup) = $a; sum(Soup Soup ...Soup) = sum(add($a $b) $c); alike(Operand ...Operand) = mono({$a $b}); dec(Ordered+Beyond) = T; dec(Ordered Ordered ...?):ord($a $b) = F; dec(Ordered Ordered ...?):not@ord($a $b) = dec($b $c); dec(-& +& ...?) = F; dec(+& -& ...?) = dec($b $c); dec(-& Int+Rat ...?) = F; dec(+& Int+Rat ...?) = dec($b $c); dec(Int+Rat -& ...?) = dec($b $c); dec(Int+Rat +& ...?) = F; deq(Ordered+Beyond) = T; deq(Ordered Ordered ...?):ord($b $a) = deq($b $c); deq(Ordered Ordered ...?):not@ord($b $a) = F; deq(-& +& ...?) = F; deq(+& -& ...?) = deq($b $c); deq(-& Int+Rat ...?) = F; deq(+& Int+Rat ...?) = deq($b $c); deq(Int+Rat -& ...?) = deq($b $c); deq(Int+Rat +& ...?) = F; eq(Ordered ...Ordered) = mono({$a $b}); inc(Ordered+Beyond) = T; inc(Ordered Ordered ...?):ord($b $a) = F; inc(Ordered Ordered ...?):not@ord($b $a) = inc($b $c); inc(-& +& ...?) = inc($b $c); inc(+& -& ...?) = F; inc(-& Int+Rat ...?) = inc($b $c); inc(+& Int+Rat ...?) = F; inc(Int+Rat -& ...?) = F; inc(Int+Rat +& ...?) = inc($b $c); inq(Ordered+Beyond) = T; inq(Ordered Ordered ...?):ord($a $b) = inq($b $c); inq(Ordered Ordered ...?):not@ord($a $b) = F; inq(-& +& ...?) = inq($b $c); inq(+& -& ...?) = F; inq(-& Int+Rat ...?) = inq($b $c); inq(+& Int+Rat ...?) = F; inq(Int+Rat -& ...?) = F; inq(Int+Rat +& ...?) = inq($b $c); same(? ...?) = mono({$a $b}); unlike(...Operand) = ord(count($a) size({$a})); zero(Group) = mono({$a add($a $a)}); abs(Complex) = sqrt(mul($a con($a))); im(Complex) = mul(-1/2i add($a con(neg($a)))); re(Complex) = mul(1/2 add($a con($a))); roots(Rootable*Complex Int):ord(1 $b):zero($a) = $a; roots(Rootable*Complex Int):ord(1 $b):not@zero($a) = order(arg map(rot(root($a $b) ?) lin(0t scale(1/2t div(2 $b)) $b))); rot(Complex Angle) = mul($a add(cos($b) mul(sin($b) i))); sgn(Complex):zero($a) = $a; sgn(Complex):not@zero($a) = div($a abs($a)); sqrt(Complex):zero($a) = $a; sqrt(Complex):not@zero($a):zero@arg($a) = switch(zero@arg@root($a 2) root($a 2) neg@root($a 2)); sqrt(Complex):not@zero($a):alike(arg($a) 1/2t) = mul(sqrt@neg($a) i); if(T ...?) = $b; if(F ...?) = ; switch(T ? ?) = $b; switch(F ? ?) = $c; geo(Field Field 0):not@zero($a):not@zero($b) =; geo(Field Field Int):not@zero($a):not@zero($b):ord(1 $c) = $a geo($b mul($b mul($b inv($a))) add($c -1)); lin(Group Group 0) =; lin(Group Group Int):ord(1 $c) = $a lin($b add($b add($b neg($a))) add($c -1)); pascal(0) = 1; pascal(1) = 1 1; pascal(Int):ord(2 $a) = 1 link(add pascal(add($a -1))) 1; range(Int Int):inc($a $b) = $a range(add($a 1) $b); range(Int Int):eq($a $b) = $a; range(Int Int):dec($a $b) = $a range(add($a -1) $b); rep(...? 0) =; rep(...? Int):ord(1 $b):even($b) = rep($a $a div($b 2)); rep(...? Int):ord(1 $b):odd($b) = $a rep($a add($b -1)); comb(Callable ...?) = comb(& $a $b 1); comb(& Callable Int) =; comb(& Callable ? ...? Int) = if($b($e) $c) comb(& $b $d add($e 1)); feed(?) = $a; feed(...Callable Callable ?) = feed($a $b($c)); find(Callable) =; find(Callable ? ...?) = if($a($b) $b) find($a $c); fold(Callable ?) = $b; fold(Callable ? ? ...?) = fold($a $a($b $c) $d); fuse(Callable ?) = $b; fuse(Callable ? ? ...?) = fuse($a pair($a $b $c $d)); link(Callable ? ?) = $a($b $c); link(Callable ? ? ? ...?) = $a($b $c) link($a $c $d $e); map(Callable) =; map(Callable ? ...?) = $a($b) map($a $c); order(Callable ...?) = sort(ord@map($a ? ?) $b); pair(Callable) =; pair(Callable ?) = $b; pair(Callable ? ? ...?) = $a($b $c) pair($a $d); scan(Callable ?) = $b; scan(Callable ? ? ...?) = $b scan($a $a($b $c) $d); sort(Callable) =; sort(Callable ? ...?) = sort($a find($a(? $b) $c)) $b sort($a find(not@$a(? $b) $c)); even(Int) = ord(mod($a 2) 0); intdiv(Int Int):not@zero($b) = div(sub($a mod($a $b)) $b); lcm(Int):not@zero($a) = $a; lcm(Int Int):not@zero@mul($a $b) = div(abs@mul($a $b) gcd($a $b)); lcm(Int Int Int ...Int) = lcm(lcm($a $b) $c $d); odd(Int) = ord(1 mod($a 2)); clip() =; clip(?) =; clip(? ...? ?) = $b; count() = 0; count(? ...?) = add(1 count($b)); last() =; last(...? ?) = $b; mid(?) = $a; mid(? ?) = $a $b; mid(? ? ...? ?) = mid($b $c); pick(Int) =; pick(? ...? 1) = $a; pick(? ...? Int):ord($c 0) =; pick(? ...? Int):ord(2 $c) = pick($b add($c -1)); rev() =; rev(? ...?) = rev($b) $a; zoot() = 0; zoot(?) = 1; zoot(? ? ...?) = 2; all() = T; all(F ...Bool) = F; all(T ...Bool) = all($b); any() = F; any(T ...Bool) = T; any(F ...Bool) = any($b); not(F) = T; not(T) = F; coeff(0 Int) = 0; coeff(Pol Int):mono($a):same(deg($a) $b) = $a(1); coeff(Pol Int):mono($a):not@same(deg($a) $b) = 0; coeff(Pol Int):poly($a) = sum@map(coeff(? $b) split($a)); cont(Pol):not@zero($a) = gcd@map(lead split($a)); ddx(0) = 0; ddx(Pol):same(0 deg($a)) = 0; ddx(Pol):mono($a):same(1 deg($a)) = $a(1); ddx(Pol):mono($a):ord(2 deg($a)) = scale(pow(x add(deg($a) -1)) mul($a(1) deg($a))); ddx(Pol):poly($a) = sum(map(ddx split($a))); integral(0) = 0; integral(Pol):mono($a) = mul($a scale(x inv@add(1 deg($a)))); integral(Pol):poly($a) = sum(map(integral split($a))); integral(Pol Scalable*Sing Scalable*Sing) = sub(integral($a)($c) integral($a)($b)); lead(Pol):not@zero($a) = coeff($a deg($a)); poldiv(Pol Pol):not@zero($b):inc(deg($a) deg($b)) = 0; poldiv(Pol Pol):not@zero($b): eq(deg($a) deg($b)) = div(lead($a) lead($b)); poldiv(Pol Pol):not@zero($b):dec(deg($a) deg($b)) = add( prod(lead($a) inv@lead($b) pow(x sub(deg($a) deg($b)))) poldiv(sub($a prod(lead($a) inv@lead($b) pow(x sub(deg($a) deg($b))) $b)) $b) ); pp(Pol):not@zero($a) = scale($a inv@cont($a)); rem(Pol Pol):not@zero($b):inc(deg($a) deg($b)) = $a; rem(Pol Pol):not@zero($b): eq(deg($a) deg($b)) = sub($a prod(lead($a) inv@lead($b) $b)); rem(Pol Pol):not@zero($b):dec(deg($a) deg($b)) = rem(sub($a prod(lead($a) inv@lead($b) pow(x sub(deg($a) deg($b))) $b)) $b); common(Set) = $a; common(Set Set ...Set) = common(mul($a $b) $c); diff(Set Set) = {find(not@in(? $b) peel($a))}; in(? Set) = not@null@mul({$a} $b); powset([] Set) = $b; powset(Tuple Set):not@null($a) = powset(pop($a) $b) powset(pop($a) add({top($a)} $b)); powset(Set) = {powset([peel($a)] {})}; set(...?) = {$a}; subset(Set Set) = ord(size($a) size(mul($a $b))); union() = {}; union(Set) = $a; union(Set Set ...Set) = union(add($a $b) $c); Sized = Peelable+Splittable; mono(Peelable) = odd(zoot(peel($a))); mono(Splittable) = odd(zoot(split($a))); null(Peelable) = ord(zoot(peel($a)) 0); null(Splittable) = ord(zoot(split($a)) 0); poly(Peelable) = ord(2 zoot(peel($a))); poly(Splittable) = ord(2 zoot(split($a))); size(Peelable) = count(peel($a)); size(Splittable) = count(split($a)); avg(Scalable*Soup ...Scalable*Soup) = scale(sum($a $b) inv@count($a $b)); max(Ordered) = $a; max(Ordered Ordered) = switch(ord($a $b) $b $a); max(Ordered Ordered Ordered ...Ordered) = max(max($a $b) $c $d); median(Ordered ...Ordered) = pick(mid@sort(ord $a $b) 1); min(Ordered) = $a; min(Ordered Ordered) = switch(ord($a $b) $a $b); min(Ordered Ordered Ordered ...Ordered) = min(min($a $b) $c $d); cos(Angle) = sin@add($a 1/4t); cos(Float) = mul(add(exp@mul($a !i) exp@mul($a !-i)) !0.5); cot(Angle+Float):not@zero@sin($a) = inv(tan($a)); crd(Angle) = mul(2 sin@scale($a 1/2)); sin(Float) = mul(sub(exp@mul($a !-i) exp@mul($a !i)) !0.5i); tan( 1/16t) = -1+\2; tan( 3/16t) = 1+\2; tan( 5/16t) = -1-\2; tan( 7/16t) = 1-\2; tan( 9/16t) = -1+\2; tan(11/16t) = 1+\2; tan(13/16t) = -1-\2; tan(15/16t) = 1-\2; tan(Angle+Float) : not@zero@cos($a) : not@in($a {1/16t 3/16t 5/16t 7/16t 9/16t 11/16t 13/16t 15/16t}) = div(sin($a) cos($a)); lop(Tuple):not@poly($a) =; lop(Tuple):poly($a) = [clip(peel($a) &)]; peek(Tuple Int) = pick(peel($a) $b); peek(Tuple Int Int ...Int) = peek(pick(peel($a) $b) $c $d); pop(Tuple):not@null($a) = [clip(& peel($a))]; push(Tuple ?) = [peel($a) $b]; top(Tuple):not@null($a) = last(peel($a)); tuple(...?) = [$a]; zip(Callable) = ; zip(Callable Tuple ...Tuple) = $a(map(peek(? 1) $b $c)) zip($a map(lop $b $c)); float(Float+Circ) = $a;# Hello! :) # I am an interpreter of the Quirl programming language. # You can chat with me in Quirl. # Don't know how? Take the tutorial!