Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Lispkit Lisp — функционалдық бағдарламалау концепцияларын сынау үшін жасалған, лексикалық ауқытты, таза функционалды Lisp-тің ("Таза Lisp") кіші жиынтығы. Ол алғаш рет жақсы бағалаумен (lazy evaluation) ерте эксперименттер үшін қолданылды. 1980 жылы әзірлеуші Питер Хендерсон ALGOL түрінде жазылған SECD машинасына негіделген нұсқасын жариялады. Компилятор және виртуалды машина жоғары дәрежеде портативті, нәтижесінде көптеген машиналарда іске асырылды.
Lispkit Lisp is a lexically scoped, purely functional subset of Lisp ("Pure Lisp") developed as a testbed for functional programming concepts. It was first used for early experimentation with lazy evaluation. An SECD machine based implementation written in an ALGOL variant was published by the developer Peter Henderson in 1980. The compiler and virtual machine are highly portable and as a result have been implemented on many machines.
Негізгі тіл
Негізгі тіл тек келесі функцияларды ғана қамтамасыз етеді, бірақ кеңейтулер Хендерсонның кітабында жалқау бағалау және детерминисттік емес бағдарламалауды нақты қолдау үшін талқыланады. atom берілген өрнек, егер оның мәні атом болса, True қайтарады; әйтпесе, False қайтарады. add берілген екі өрнектің сандық мәндерінің қосындысын қайтарады. car мәні жұп болатын өрнектің бірінші мәнін қайтарады. cdr мәні жұп болатын өрнектің екінші мәнін қайтарады. cons екі өрнекті бергенде, олардың мәндерінен тұратын жұпты қайтарады. div берілген екі өрнектің сандық мәндерінің бөліндісін қайтарады. eq берілген екі өрнектің мәндері тең болса, True қайтарады; әйтпесе, False қайтарады. if берілген үш өрнектің біріншісінің мәні True болса, екіншісінің мәнін қайтарады, әйтпесе үшіншісінің мәнін қайтарады. lambda аргументтер тізімі мен өрнекті функция ретінде қайтарады. let берілген өрнекті, оның ішіндегі декларациялармен (атаулы өрнектер ретінде көрінетін) қайтарады. letrec let-ке ұқсас, бірақ декларацияланған атаулар декларациялардың өзінде де көрінеді. leq екі өрнектің біріншісінің мәні екіншісінен сандық жағынан кем немесе тең болса, True қайтарады; әйтпесе, False қайтарады. mod (немесе rem) екі өрнектің сандық мәндерінің модулін (қалдықты) қайтарады. mul екі өрнектің сандық мәндерінің көбейтіндісін қайтарады. quote берілген өрнекті өзгеріссіз, мән ретінде қайтарады. sub екі өрнектің сандық мәндерінің айырмасын қайтарады. lambda, let және letrec функциялары ұқсас, бірақ атаулы айнымалыларды өңдеудегі жіңішке айырмашылықтары бар, олар оларды әртүрлі жағдайларда пайдалы етеді. lambda функцияны анықтап, қайтарады, let өрнектерді айнымалылардың атауларымен байланыстырады, ал letrec let-ке ұқсас, бірақ рекурсивті функциялар мен мәндерді, мысалы, шексіз қатарларды анықтауға мүмкіндік береді.
The base language provides the following functions only but extensions are discussed in Henderson's book for the explicit support of lazy evaluation and non deterministic programming. atom given an expression returns True if its value is atomic; False if not. add given two expressions returns the sum of their numeric values. car given an expression whose value is a pair, returns the pair's first value. cdr given an expression whose value is a pair, returns the pair's second value. cons given two expressions returns a value pair consisting of their values. div given two expressions returns the quotient of their numeric values. eq given two expressions returns True if their values are equal; False if not. if given three expressions returns the value of the second if the value of the first is True, otherwise returns the value of the third. lambda given an argument list and an expression, returns them as a function. let given an expression with declarations (as named expressions visible in the expression) returns its value. letrec like let, except the declared names are also visible in the declarations themselves. leq given two expressions, returns True if the value of the first is numerically less than or equal to the value of the second; False if not. mod (or rem) given two expressions, returns the modulus (also known as the remainder) of their numeric values. mul given two expressions, returns the product of their numeric values. quote given an expression, returns that expression as a value. sub given two expressions, returns the difference of their numeric values. The functions, lambda, let, and letrec, are similar but have subtle differences in the way that they treat named variables which make them useful in different ways. lambda defines and returns a function, let binds expressions to variable names, and letrec is essentially similar to let except it allows for the definition of recursive functions and values, e. g., infinite series.