#|
http://data.bls.gov/cgi-bin/cpicalc.pl?year1=1980&cost1=1.24&year2=2007
 =>
 ...
	<span id="answer">$3.12</span><br />
|#

(defun get-answer (cost1 year1 year2)
  (ap5::wget
   (format nil
	   "http://data.bls.gov/cgi-bin/cpicalc.pl?year1=~a&cost1=~a&year2=~a"
	   year1 cost1 year2)
   "inflation.txt")
  (with-open-file (f "inflation.txt")
    (loop while (setf line (read-line f nil nil)) do
      (when (search "<span id=\"answer\">$" line :test 'string-equal)
	(let* ((dollar (position #\$ line))
	       (lt (position #\< line :start dollar))
	       (ans (read-from-string line nil nil :start (1+ dollar) :end lt)))
	  (return-from get-answer ans))))))

(defrelation inflation :derivation individual-derived
  :documentation "(x y z) s.t. $1 in year x is worth $z in year y"
  :arity 3 :types (integer integer number) :equivs (= = =)
  :nonatomic t :type-enforcements (:none)
  :size ((input input output) 1)
  :tester
  (lambda (&rest ignore) (declare (ignore ignore))
    '(lambda (rel x y z)
       (and (integerp x)(integerp y) (numberp z)
	    (ap5::loop for ans s.t. (inflation x y ans) thereis (= ans z)))))
  :generator
  ((simplegenerator
    (y1 y2 output)
    (and (integerp y1)(integerp y2)
	 (ignore-errors (get-answer 1 y1 y2)))
    1e6)))
