cirilisp/инит.ћ
2019-02-26 13:50:00 +01:00

126 lines
5.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(опиши (саар џ) (сар (сар џ)))
(опиши (садр џ) (сар (сдр џ)))
(опиши (сдар џ) (сдр (сар џ)))
(опиши (сддр џ) (сдр (сдр џ)))
(опиши (сааар џ) (сар (сар (сар џ))))
(опиши (саадр џ) (сар (сар (сдр џ))))
(опиши (садар џ) (сар (сдр (сар џ))))
(опиши (саддр џ) (сар (сдр (сдр џ))))
(опиши (сдаар џ) (сдр (сар (сар џ))))
(опиши (сдадр џ) (сдр (сар (сдр џ))))
(опиши (сддар џ) (сдр (сдр (сар џ))))
(опиши (сдддр џ) (сдр (сдр (сдр џ))))
(опиши нил ())
(опиши (једнаки? џ ж)
(ако (и (конс? џ) (конс? ж))
(и (једнаки? (сар џ) (сар ж)) (једнаки? (сдр џ) (сдр ж)))
(јед? џ ж)))
(опиши (новиред) (прикажи #\новиред))
(опиши (није предикат)
(ако предикат #л #и))
(опиши истинито #и) (опиши лажно #л)
(опиши (листа . арг) арг)
(опиши (дужина листа)
(опиши (дужина-пом листа акумулатор)
(ако (нил? листа)
акумулатор
(дужина-пом (сдр листа) (+ акумулатор 1))))
(ако (није (листа? листа))
(баци "Неправилан тип аргумента прослеђен функцији")
(дужина-пом листа 0)))
(опиши-складњу (и . предикати)
(ако (нил? предикати) #и
(ако (нил? (сдр предикати))
(сар предикати)
(листа 'ако (сар предикати)
(примени и (сдр предикати))
#л))))
(опиши-складњу (или . предикати)
(ако (нил? предикати) #л
(ако (нил? (сдр предикати))
(сар предикати)
(листа 'ако (листа 'није (сар предикати))
(примени или (сдр предикати))
(сар предикати)))))
(опиши-складњу (услов . клаузе)
(ако (= (дужина клаузе) 0)
(баци "Конс позван са празном листом клауза")
(ако (није (и (конс? (сар клаузе)) (листа? (сар клаузе))))
(баци "Неправилна конс клауза")
(листа 'ако (саар клаузе)
(ако (нил? (сдар клаузе))
(саар клаузе)
(конс 'почни (сдар клаузе)))
(ако (нил? (сдр клаузе))
()
(примени услов (сдр клаузе)))))))
(опиши (мапирај процедура листа)
(услов
((није (листа? листа)) (баци "Функција се не може мапирати\
на не-листу"))
((није (процедура? процедура)) (баци "Не може се мапирати\
не-функција"))
((нил? листа) ())
(#и (конс
(процедура (сар листа))
(мапирај процедура (сдр листа))))))
(опиши-складњу (нека листа-променљивих . тело)
(опиши (валидна-нека-листа-променљивих листа)
(опиши (дужине2 листа)
(= (дужина листа) 2))
(примени и (мапирај дужине2 листа)))
(ако (није (валидна-нека-листа-променљивих листа-променљивих))
(баци "Невалидна листа променљивих за \"нека\" процедуру")
(почни
(опиши имена (мапирај сар листа-променљивих))
(опиши вредности (мапирај садр листа-променљивих))
(опиши ламбда-израз (надовежи (листа 'ламбда имена) тело))
(конс ламбда-израз вредности))))
(опиши (макс . аргументи)
(опиши (листа-бројева? листа)
(примени и (мапирај број? листа)))
(услов
((= 0 (дужина аргументи))
(баци "Функција \"макс\" захтева барем један\
аргумент"))
((није (број? (сар аргументи))) (баци "Аргументи дати функцији\
\"макс\" нису бројеви"))
((и (= 1 (дужина аргументи)) (број? (сар аргументи)))
(сар аргументи))
(#и
(опиши остатак (примени макс (сдр аргументи)))
(ако (> остатак (сар аргументи))
остатак (сар аргументи)))))
(опиши (мин . аргументи)
(опиши (листа-бројева? листа)
(примени и (мапирај број? листа)))
(услов
((= 0 (дужина аргументи))
(баци "Функција \"макс\" захтева барем један\
аргумент"))
((није (број? (сар аргументи))) (баци "Аргументи дати функцији\
\"макс\" нису бројеви"))
((и (= 1 (дужина аргументи)) (број? (сар аргументи)))
(сар аргументи))
(#и
(опиши остатак (примени мин (сдр аргументи)))
(ако (< остатак (сар аргументи))
остатак (сар аргументи)))))
(опиши (цео-број? џ)
(= (именилац (нетачно->тачно џ)) 1))