Nie można. Rzecz w tym, że begin
ma dwie role: jedna to sekwencja wyrażeń pobocznych, a druga to, że jest używana do "łączenia" wyników makr. Fakt, że można użyć definicji begin
z powyższą definicją, jest rezultatem tej drugiej funkcji i nie można jej samemu napisać.
Jeśli naprawdę chcesz śledzić całą historię, to mógłby określić begin
jako prostego makra, które sprawia, że nie tylko aspekt sekwencjonowania (i może rzeczywiście być realizowane jako takie, choć zazwyczaj nie jest) . Ale, musisz dodać jawne rozpoznawanie begin
s do definicji splicingu (toplevel lub wewnętrznego). Oznacza to, że implementacja makra jest w porządku, ale tak naprawdę nie może to być biblioteka, ponieważ rdzeń ekspandera powinien o tym wiedzieć. (A ponieważ język ma zasięg leksykalny, nie ma dobrej metody, aby rdzeń ekspandera zidentyfikował begin
s, które nie są zdefiniowane w języku podstawowym.)
Podsumowując wszystko, można powiedzieć, że R5RS jest tylko błędny w klasyfikacji begin
jako "składni biblioteki", ponieważ nie można jej zdefiniować w bibliotece ... ale nawet to nie jest do końca dokładne, ponieważ R5RS definiuje "składnię biblioteki" jako tylko "wyrażenia pochodne". Prawdziwym błędnym punktem jest zatem to, że jedna z dwóch twarzy begin
jest zaimplementowana w innym miejscu, w ekspanderze (dla kontekstów definicji).
Należy również zauważyć, że R6RS wyjaśnia całą transakcję: dwie twarze begin
są wyraźne, a teraz jest częścią języka podstawowego, a nie "formą biblioteki", a nawet formą pochodną.
Dlaczego jest on uważany za "składnię biblioteki", a nie po prostu "składnię" w R5RS? Myślałem, że możesz przepisać formularze biblioteczne tylko za pomocą podstawowych formularzy? – eljenso
To pomyłka (razem z artykułem wikipedii). –
[potrzebne źródło] – Javier