Skip to content

simple-currency is a Common Lisp library which converts between currencies using foreign exchange information published daily by the ECB

License

Notifications You must be signed in to change notification settings

a0-prw/simple-currency

Repository files navigation

This is a simple library for converting between currencies
using the foreign exchange information posted daily by the ECB. You
can find more information on the time of updates etc at:

http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html

The library is so simple that it is easier for a user to just read the
documentation strings and the function definitions themselves, so
please look at simple-currency.lisp if you want more detailed
documentation.

Installation:

This package uses DEXADOR, PLUMP, SIMPLE-DATE, SPLIT-SEQUENCE, and
CL-STORE but if you use quicklisp (http://www.quicklisp.org/beta/),
they will be automatically installed for you.

(ql:quickload :simple-currency)
(CIES:UPDATE-CURRENCIES-HASH) ;;downloads currency info from ecb

If it does not return NIL, you are ready to go

Usage example:

(CIES:CONVERT 100 :USD :GBP)

==> 
861350/13373
#<SIMPLE-DATE:INTERVAL P1D>

If you want it to look like a money amount, you can do

(CIES:DISPLAY-CURRENCY (CIES:CONVERT 100 :USD :GBP) :GBP)

==>
"GBP 64.41"

Likewise with checking the interval for unacceptably old quotations -
see documentation for simple-date.

NB: Remember that floats "contaminate" so if you do (CIES:CONVERT
100.25 :eur :usd).  You will get a float back: display-currency calls
a function which expects a rational, so that will signal an error.

Convenience facilities:

There is a macro (CIES:WITH-CURRENCY :xyz <conversion-form>) which can
replace references to (convert <number> <target currency>) in
conversion-form with (DISPLAY-CURRENCY (CONVERT <number> <from> <to>)
<from>).  I haven't thought very hard about this macro, so it might
hold unintended surprises.

There is a simple database of currency information which can be
accessed with CIES:LOOKUP-CURRENCY, so for example, if you are in the
SIMPLE-CURRENCY package or have USED it:

(ccy-ddigits (lookup-currency :jpy))
==>
"0"

Another example:

(map 'list (lambda (acode)
                   (let ((cd (lookup-currency acode)))
                     (list acode (ccy-country cd) (ccy-name cd))))
           (available-currencies))

==>
(("EUR"
  ("Vatican City State (HOLY SEE)" "SPAIN" "SLOVENIA" "SLOVAKIA" "SAN MARINO"
   "SAINT PIERRE AND MIQUELON" "SAINT MARTIN (FRENCH PART)" "SAINT BARTHELEMY"
   "REUNION" "PORTUGAL" "NETHERLANDS" "MONTENEGRO" "MONACO" "MAYOTTE"
   "MARTINIQUE" "MALTA" "LUXEMBOURG" "ITALY" "IRELAND"
   "HOLY SEE (VATICAN CITY STATE)" "GUADELOUPE" "GREECE" "GERMANY"
   "FRENCH SOUTHERN TERRITORIES" "FRENCH GUIANA" "FRANCE" "FINLAND"
   "EUROPEAN UNION" "ESTONIA" "CYPRUS" "BELGIUM" "AUSTRIA" "ANDORRA"
   "AALAND ISLANDS")
  "Euro")
 ("ZAR" ("SOUTH AFRICA" "NAMIBIA" "LESOTHO") "Rand")
 ("THB" ("THAILAND") "Baht") ("SGD" ("SINGAPORE") "Singapore Dollar")
 ("PHP" ("PHILIPPINES") "Philippine Peso")
 ("NZD" ("TOKELAU" "PITCAIRN" "NIUE" "NEW ZEALAND" "COOK ISLANDS")
  "New Zealand Dollar")
 ("MYR" ("MALAYSIA") "Malaysian Ringgit") ("MXN" ("MEXICO") "Mexican Peso")
 ("KRW" ("KOREA, REPUBLIC OF") "Won") ("INR" ("INDIA" "BHUTAN") "Indian Rupee")
 ("ILS" ("ISRAEL") "New Israeli Sheqel") ("IDR" ("INDONESIA") "Rupiah")
 ("HKD" ("HONG KONG") "Hong Kong Dollar") ("CNY" ("CHINA") "Yuan Renminbi")
 ("CAD" ("CANADA") "Canadian Dollar") ("BRL" ("BRAZIL") "Brazilian Real")
 ("AUD"
  ("TUVALU" "NORFOLK ISLAND" "NAURU" "KIRIBATI"
   "HEARD ISLAND AND McDONALD ISLANDS" "COCOS (KEELING) ISLANDS"
   "CHRISTMAS ISLAND" "AUSTRALIA")
  "Australian Dollar")
 ("TRY" ("TURKEY") "Turkish Lira")
 ("RUB" ("RUSSIAN FEDERATION") "Russian Ruble")
 ("HRK" ("CROATIA") "Croatian Kuna")
 ("NOK" ("SVALBARD AND JAN MAYEN" "NORWAY" "BOUVET ISLAND") "Norwegian Krone")
 ("CHF" ("SWITZERLAND" "LIECHTENSTEIN") "Swiss Franc")
 ("SEK" ("SWEDEN") "Swedish Krona") ("RON" ("ROMANIA") "New Romanian Leu")
 ("PLN" ("POLAND") "Zloty") ("LVL" ("LATVIA") "Latvian Lats")
 ("LTL" ("LITHUANIA") "Lithuanian Litas") ("HUF" ("HUNGARY") "Forint")
 ("GBP" ("UNITED KINGDOM" "JERSEY" "ISLE OF MAN" "GUERNSEY") "Pound Sterling")
 ("DKK" ("GREENLAND" "FAROE ISLANDS" "DENMARK") "Danish Krone")
 ("CZK" ("CZECH REPUBLIC") "Czech Koruna") ("BGN" ("BULGARIA") "Bulgarian Lev")
 ("JPY" ("JAPAN") "Yen")
 ("USD"
  ("VIRGIN ISLANDS (US)" "VIRGIN ISLANDS (BRITISH)"
   "UNITED STATES MINOR OUTLYING ISLANDS" "UNITED STATES"
   "TURKS AND CAICOS ISLANDS" "TIMOR-LESTE" "PUERTO RICO" "PANAMA" "PALAU"
   "NORTHERN MARIANA ISLANDS" "MICRONESIA, FEDERATED STATES OF"
   "MARSHALL ISLANDS" "HAITI" "GUAM" "EL SALVADOR" "ECUADOR"
   "BRITISH INDIAN OCEAN TERRITORY" "BONAIRE, SINT EUSTATIUS AND SABA"
   "AMERICAN SAMOA")
  "US Dollar"))

About

simple-currency is a Common Lisp library which converts between currencies using foreign exchange information published daily by the ECB

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published