JEG SVØMMER | |
---|---|
Sprog klasse | streng, funktionel |
Dukkede op i | 1966 |
Forfatter | Peter Landin |
Type system | dynamisk |
Blev påvirket | Algol 60 , Lisp |
påvirket | SASL , ML , Miranda , Haskell , Clean , Lucid |
ISWIM (fra det engelske If you See What I Mean - if you understand what I mean ) er et teoretisk programmeringssprog beskrevet af Peter Landin i 1966 [ 1] som et imperativt sprog med en funktionel kerne baseret på λ- calculus med syntaktisk sukker . Hovedfunktionen er brugen af en J-operator til den foranderlige tilstand , tildeling og kontrolmekanisme , som gør det muligt at fange den aktuelle fortsættelse . Takket være λ-regningen har sproget funktioner af højere orden og leksikalske variabler .
Den operationelle semantik af ISWIM er defineret af SECD- maskinen ( stak, miljø, kode, dump ), og bruger call by value , dvs. streng evaluering . Koden i sproget skulle se så tæt som muligt på matematisk notation, så Landin fjernede semikolonet mellem udsagn og begyndelsesblokkene, der er typiske for Algol-lignende sprog og erstattede dem med et tilpasningsafhængigt omfang.
Et specifikt træk ved ISWIM-notationen er brugen af where-klausuler. Et ISWIM-program er et enkelt udtryk, der er begrænset til where-sætninger (hjælpedefinitioner, der inkluderer relationer mellem variabler), betingede udtryk og funktionsdefinitioner. ISWIM (sammen med CPL ) er det første sprog, der bruger denne notation.
Et bemærkelsesværdigt semantisk træk var evnen til at definere nye datatyper som en (potentielt rekursiv) sum af produkter; til dette blev der brugt en fyldig beskrivelse, ganske lig naturlige sprog, i det væsentlige lig med algebraiske datatyper i moderne funktionelle sprog. Variabler i sproget havde ingen eksplicitte typedeklarationer, hvilket tyder på, at Landin planlagde et dynamisk skrevet sprog (som Lisp , ikke Algol ); muligvis også antaget en form for typeslutning .
ISWIM blev aldrig implementeret i software, selvom Art Evans PAL og John Reynolds Gedanken brugte de fleste af de vigtigste funktioner i Landins sprog, inklusive overførselsoperationer. Begge disse sprog brugte dynamisk skrivning. Milners ML kan betragtes som ækvivalent med ISWIM uden J-operatoren, men beriget med typeinferens .
En anden række af efterfølgere til ISWIM slap af med imperative funktioner - tildeling og J-operatøren - udviklede sig som rent funktionelle sprog, og skiftede efterfølgende til doven evaluering . SASL , Miranda og Haskell gik denne vej .