THE CHALLENGE: Write a program that, given a number n, prints the expansion of (a+b)^n.
Example: 4 → a^4 + 4a^3b + 6a^2b^2 + 4ab^3 + b^4
HOWEVER: You must do the above in a language you do not have any experience with. Never programmed in Haskell before? Gather some documentation and go for it.
(Well, you're advised to do that. I can't possibly know whether or not you know a programming language.)
(defun take (sequence n &key (filler nil)) (subseq (ensure-length sequence n :filler filler) 0 n))
;; maybe this would be better done as a defun-memoized? (defmacro memoize-named-function (name)
`(eval-when (:compile-toplevel :load-toplevel :execute) (setf (fdefinition ',name)(memoize #',name))))
(defun binomial-element (n k) (merge-strings (string-to-the-power "a" (- n k)) (string-to-the-power "b" k)))
(defun newton-binomial-expansion (n) (apply #'merge-strings (insert-inbetween (loop for k to n
for element = (binomial-element n k)
for coeff in (binomial-coefficients (1+ n))
collect (string-multiply element coeff))
" + ")))