A poster presentation at the 1998 International Conference on Functional Programming (ICFP'98)
Mt. Washington Conference Center, Baltimore, MD, 27-29 September 1998
(some-area (bounding-box 90.0 178W -90.0 179E) (source FNMOC) (model NOGAPS)(resolution 1.0) (products ((geopotential-height) (layer isobar 500)(tau 6)) ((geopotential-height) (layer msl)(tau 6)) ((temperature) (layer isobar 1000)(tau 6) (model NORAPS)) (METAR) (SIGMET))) (Area51 (use special-area-51)) (Area51 (use special-area-51) (user 007) (products (TAF)))
(some-area (bounding-box 90.0 178W -90.0 179E) (model NOGAPS)(resolution 1.0) (products (geopotential-height (layer isobar 500)(tau 12)) (temperature (source NOAA) (model NOGAPS) (layer msl))))
Note a (object-name argument...)
format of each sentence in the request. When a server internalizes -- compiles -- a sentence, it looks up a constructor named OBJ-LOADER:object-name
in the current environment, and applies this constructor to the argument...
. In other words, the server un-serializes each object mentioned in the request.
(OBJ-LOADER:products . #<procedure #x1006ECB3>) (OBJ-LOADER:bounding-box . #<procedure #x1006ECA8>) (OBJ-LOADER:model . #<procedure #x1006EC00>) (OBJ-LOADER:source . #<procedure #x1006EBF5>) (executor . #<procedure serve-grids>) (center-id . 58) (process-id . 58) (resolution . 1.) (grid-id . 240) (pressure (product-GRIB-code . 1)) (geopotential-height (product-GRIB-code . 7)) (temperature (product-GRIB-code . 11)) (GlobalWarnings (executor . #<procedure serve-global-warnings>)) (SIGMET (executor . #<procedure perform-SIGMET-request>) (mime-type . "text/x-omf-advisories")) (|Env Name Key!| . "*** initial env ***"))
(products (geopotential-height (layer isobar 500) (tau 12)) (temperature (source NOAA) (model NOGAPS) (layer msl))) ; the top-level request context (resolution . 1.) ; request defaults (process-id . 58) ; model defaults (resolution . 2.5) (grid-id . 223) ; Note an internal format of the bounding-box (bounding-box . #(90. -178. -90. 179.)) (area-id . some-area) ; inherited from the standard prelude (OBJ-LOADER:products . #<procedure #x1006ECB3>) (center-id . 58) (process-id . 58) (resolution . 1.) (grid-id . 240) ; etc., see above
((tau . 12) ; product specs (layer isobar 500) (product-GRIB-code . 7) ; ... means geopotential-height (g3) ; mark! (products (geopotential-height (layer isobar 500) (tau 12)) (temperature (source NOAA) (model NOGAPS) (layer msl))) ; inherited from the top-level request context (resolution . 1.) ; request defaults (process-id . 58) ; model defaults (resolution . 2.5) (grid-id . 223) (bounding-box . #(90. -178. -90. 179.)) (area-id . some-area) ... (center-id . 58) ; global defaults (process-id . 58) (resolution . 1.) (grid-id . 240) (geopotential-height (product-GRIB-code . 7)) (temperature (product-GRIB-code . 11)) (|Env Name Key!| . "*** initial env ***"))
Using this environment, the following database query is issued:
AREA_ID=some-area MODIFIED_SINCE=0 BOUNDING_BOX=90. -178. -90. 179. OUTPUT_FILE=/var/tmp/baaa12089 PARAMETER=7 CENTER=58 0 58 LAYER=100 500 GRID_ID=223 TAU=12 RESOLUTION=1. 1.Some database keys (set in bold) are specified several times in the environment, within defaults of different depth. The most specific -- the least default -- value is chosen for the query.
temperature
request((layer . msl) ; product specs (process-id . 58) (resolution . 2.5) (grid-id . 223) ; model defaults (center-id . 59) (subcenter-id . 0) (product-GRIB-code . 11) ; ... means temperature (g4) ; mark! ... (resolution . 1.) ; request defaults (process-id . 58) ; model defaults (resolution . 2.5) (grid-id . 223) (bounding-box . #(90. -178. -90. 179.)) (area-id . some-area) ... (center-id . 58) ; global defaults (process-id . 58) (resolution . 1.) (grid-id . 240) ... (|Env Name Key!| . "*** initial env ***"))
This environment is then used to look up all the necessary keys for the query:
AREA_ID=some-area MODIFIED_SINCE=0 BOUNDING_BOX=90. -178. -90. 179. OUTPUT_FILE=/var/tmp/daaa12089 PARAMETER=11 CENTER=59 0 58 LAYER=102 GRID_ID=223 TAU=0 RESOLUTION=2.5 2.5Note that the environment contains not only simple values but procedures as well, which may add new or shadow old bindings in the environment.
A one-page abstract of this presentation [.ps.gz
, 5K]
Metcast home page
http://www.metnet.navy.mil/Metcast/
Request Language specification
http://www.metnet.navy.mil/Metcast/Request-Lang.html
Vocabulary package, (poly/homo)morphic dictionaries with a dynamic "inheritance" path
Hierarchical repository in Scheme
that implements the request language "stack"
Metcast Server URL
http://www.metnet.navy.mil/cgi-bin/oleg/server
oleg-at-okmij.org