( (assert-d D) ) ( (assert-d $_) (abort CouldNotParse) ) ;; return a dummy variable t or t1 ( (tdummy mc_t mc_t1) ) ( (tdummy $_ mc_t) ) ;; n-th derivative t <- expr, d^n f(t)/d^n t ( (texp (iter $op $n $f $expr) $res) (assert-d $op) (!) (tdummy $expr $var) (tderiv $n $f ($var) $var $deriv) (texp (progn (setf $var $expr) $deriv) $res) ) ;; 1-st derivative t <- expr, d f(t)/d t ( (texp (iter1 ($op $f | $_) $expr) $res) (texp (iter $op (real 1) $f $expr) $res) ) ( (get-var ($f | $_) $f) (!) ) ( (get-var $x $x) (atom $x) (!) ) ( (get-var $_ $_) (abort CouldNotParse) ) ;; partial n-th derivative t <- args[i], d^n f(args[0], ..., args[i-1], t, args[i+1], ..., args[k])/d^n t ( (texp (iter2 $op ($i | $_) $f (list $args_)) $res) (assert-d $op) (map &get-var-%-2 $args_ $args) (nth $i $args $expr) (tdummy $expr $var) (replace-nth $i $args $var () $targs) (tderiv $n $f $args $var $deriv) (texp (progn (setf $var $expr) $deriv) $res) ) ( (id $x $x) ) ;; apply a predicate on a list ( (map $pred () ()) ) ( (map $pred ($x | $r) ($x1 | $r1)) ($pred $x $x1) (map $pred $r $r1) ) ( (reverse $l1 $l2) (reverse $l1 () $l2) ) ( (reverse () $l $l) ) ( (reverse ($h | $l1) $l2 $l3) (reverse $l1 ($h | $l2) $l3) ) ( (nth 1: ($h | $t) $h) (!) ) ( (nth $n ($h | $t) $res) (+ $n -1: $n-1) (nth $n-1 $t $res) ) ( (nth $_ $__ aborted) (abort bad_subscript) ) ( (replace-nth 1: ($h | $t) $x $accum $res) (!) (reverse ($x | $accum) $t $res) ) ( (replace-nth $n ($h | $t) $x $accum $res) (+ $n -1: $n-1) (replace-nth $n-1 $t $x ($h | $accum) $res) ) ( (replace-nth $_ $__ $___ $____ aborted) (abort bad_subscript) )