Цей файл пояснює відмінності між реалізацією SMoL (що також SMoL використовуємий у SMoL Quizzes) та мовою, представленою у статі (далі, статтєвий SMoL).
У статті ми пропускаємо наступні конструкції, тому що вони не мають відношення до будь-яких програм, які ми показували у статті:
let*
та letrec
, які означають те саме, що й у Racket.Ми пропускаємо наступні конструкції, оскільки вони не мають відношення до будь-яких неправильних уявлень, які ми представляємо в статті:
empty
, cons
, empty?
, та append
filter
, map
, foldl
, foldr
++
equal?
, яка перевіряє не структурну рівністьand
, or
, та not
ivec
, pair
, та ipair
(ці оператори працюють як і їх m-версії але створюють незмінні вектори)test
spy
, яка друкує значення із відладочною інформацієюzero?
Реалізація SMoL має трі рівня (наприклад,
smol/fun
, smol/state
, та
smol/fun
) як пояснено у статті. Ці рівні відповідають до трьох тестів.
SMoL із статі не вказує, чи локальні змінні, визначені в тілі функції, знаходяться в тому самому середовищі, що й параметри функції. Наприклад, поведінка наступної програми не визначена
(deffun (f x)
(defvar x 1)
x)
(f 0)
Програма може або видати помилку (оскільки x
визначено двічі в одному середовищі), або видати 1
(оскільки локальний x
затіняє параметр x
). Реалізація SMoL передбачає поведінку затінення.