W Racket define
jest specjalną formą, a nie wyrazem, więc nie ma wartości per-se, jeśli starają się wykonać coś takiego dostaniesz błąd:
(display (define x 42))
=> define: not allowed in an expression context in: (define x 42)
gdyby to było mieć wartość byłoby coś podobnego do void
, ale to będzie zależeć od konkretnych szczegółów implementacji interpretera (wierzę widziałem jeden powrót interpretera #t
po define
została zakończona)
The constant #<void>
is returned by most forms and procedures that have a side-effect and no useful result
The specification nie zagłębia się w szczegóły tego punktu, albo - wzmacniając stwierdzenie, że jest zależne od implementacji.
Co masz na myśli przez jego typ? 'define' nie ma wartości zwracanej (a zatem nie ma typu zwracanego), ponieważ nie jest wyrażeniem. – sepp2k
define faktycznie jest wyrażeniem. Teraz, dla twojego drugiego pytania: co mam na myśli przez typ? Cóż, można powiedzieć, że "5 ma typ Numeru", "#f ma typ Boolean", "(lambda (n) (* n n))" ma typ [Numer -> Numer]. Moje pytanie brzmi: jaki jest typ zdefiniowanego wyrażenia? Mam nadzieję, że wyraziłem się jasno. – TheEmeritus
Nie w Rakiecie to nie jest. Jeśli spróbujesz użyć go w kontekście wyrażenia, Racket wyświetli komunikat o błędzie "define: not allowed in context context". – sepp2k