Кіріспе

Берілген бағдарламалау тіліндегі сандарды көрсететін дерек типтерінің жиынтығы. Scheme және одан шабыттанған Lisp диалектілерінде сандық мұнара – сандарды көрсететін дерек типтерінің жиынтығы және олардың иерархиялық ұйымдалу логикасы. Мұнарадағы әр тип тұжырымдамалық тұрғыдан негізгі типтің үстінде "тұрады", сондықтан бүтін сан – рационал сан және сан, бірақ керісінше әрқашан дұрыс болмайды, яғни әр сан бүтін сан емес. Бұл асимметрия тілге сандық типтерді тек бір бағытта ғана имплицитті түрлендіруге мүмкіндік береді, бұл семантикалық проблемаларға әкелмейді: бүтін санды рационалға түрлендіру ешқандай ақпаратты жоғалтпайды және функцияның қайтаратын мәніне ешқандай әсер етпейді, бірақ көптеген нақты сандарды бүтін санға түрлендіру кез келген маңызды есептеуді өзгертеді (мысалы, нақты 1/3 ешқандай бүтін санға тең емес) және сондықтан рұқсат етілмейді.

Lisp тілінде

Негізінен, сандық мұнара сандардың теориялық қасиеттерін оңай іске асырылатын тіл құралы ретінде кодтауға арналған: әрбір бүтін сан 1-ге тең нақты бөлімі бар рационал сан, ал барлық нақты сандар 0-ге тең жорамал бөлімі бар кешенді сан. Іс жүзінде, іске асыру осы қасиеттерді ескермеу арқылы уақытты және жадты үнемдеуі мүмкін, егер олар арифметикалық тұрғыдан маңызды болмаса, сондай-ақ сандық мәндерді канондық түріне келтіру кезінде, санның маңызсыз компоненттерін жою арқылы оның өңделу тиімділігін арттыруы мүмкін. Ең жалпы тип – «сан» біршама шатастыратын атауға ие: ол математикалық мәндердің барлығын қамтиды, олардың типі кешенді сандардан гөрі жалпырақ, бірақ оларды Scheme анықтаған стандартты математикалық операцияларда қолдануға болады. Осылайша, ол, мысалы, оң және теріс шексіздікті (+inf.0 және -inf.0, мұндағы «мәнді» cardinality-ге дейінгі жуықтау деп түсіну керек) қамтиды, себебі олар кем дегенде кейбір сандық операцияларға қолданылуы мүмкін математикалық объектілер (мысалы, шексіздікке қосу немесе көбейту нәтижесінде шексіздік шығады; немесе шексіздікті шексіздікпен салыстыру, онда шексіздік әрқашан кез келген шекті мәннен үлкен). Техникалық тұрғыдан алғанда, Lisp-тегі «сан» типі IEEE 754 стандартында анықталған, қатаң түрде сандық емес мәндерге типтік иерархияда орын береді. Scheme бағдарламалау тілі өзінің барлық арифметикалық операцияларын осы модельде анықтайды, басқа Lisp диалекттерінің көпшілігі де солай істейді. Кейбір іске асырулар мұнараны кеңейтуі немесе бейімдеуі мүмкін. Kawa, JVM үшін жасалған Scheme іске асыруы, мұнараны кватерниондар мен шамаларды қосу арқылы кеңейтеді, ал шамалар – сандық мәндерді бірліктермен қосалқы типтеудің бір жолы; мысалы, грамдар саны мен метрлер санының қосындысын алудың мәні жоқ, себебі шамалар арқылы сандар өлшемдік талдаудан алынған логиканы мұралайды, осылайша олардың мағынасы мен жарамды арифметикалық өзара әрекеттесуі анықталады. Тағы бір кең таралған нұсқа – мұнараның немесе оның бөліктерінің дәл және шамалы нұсқаларын қолдау; R7RS Scheme мұны іске асыруларға ұсынады, бірақ міндеттейді. Бұл жағдайда, ымсыз түрлендірудің рұқсат етілуін анықтау үшін ұқсас семантика қолданылады: шамалылық – сандардың жұқпалы қасиеті, және нақты және шамалы мәндерді қамтитын кез келген сандық операция нәтижесінде шамалылық дәлдігі жоғарырақ шамалы санның дәлдігіне тең немесе одан да жоғары болуы керек, егер дәлдік іс жүзінде шексіз болмаса (мысалы, анықталатын периодтылықты қамтиды) немесе операция нәтижесінің дәлдігі оның кез келген операндысының шамалылығына тәуелді емес екені дәлелденбесе (мысалы, кем дегенде бір көбейткіші 0 болатын көбейтулер тізбегі).