In Racket define
è una forma speciale e non un'espressione, in modo da non avere un valore per-sé, se si tenta di eseguire qualcosa di simile si otterrà un errore:
(display (define x 42))
=> define: not allowed in an expression context in: (define x 42)
Se si dovesse avere un valore che sarebbe stato qualcosa di simile alla void
, ma che dipenderà particolari dettagli di implementazione dell'interprete (credo che ho visto un ritorno interprete #t
dopo un define
è stato completato)
The constant #<void>
is returned by most forms and procedures that have a side-effect and no useful result
Il specification non entra nei dettagli su questo punto, o - rafforzando l'affermazione che dipende dall'implementazione.
fonte
2013-03-19 15:56:20
Cosa intendi per tipo? 'define' non ha un valore di ritorno (e quindi nessun tipo di ritorno) in quanto non è un'espressione. – sepp2k
define in realtà è un'espressione. Ora, per la tua altra domanda: cosa intendo per tipo? Bene, si potrebbe dire che '5 ha il tipo di numero', '#f ha il tipo di booleano', '(lambda (n) (* n n))' ha il tipo di [Numero -> Numero]. La mia domanda è: qual è il tipo di espressione definita? Spero di essere stato chiaro. – TheEmeritus
Non in Racket non lo è. Se si tenta di utilizzarlo in un contesto di espressione, Racket produrrà il messaggio di errore "define: not allowed in a expression context". – sepp2k