2013-03-19 16 views
6

Per dirla semplicemente: La mia domanda è qual è il tipo di espressione definita in Scheme?Tipo di definizione dell'espressione in Schema

Prendiamo ad esempio:

(define x 5) 

o

(define x (lambda (n) (* n n))) 

E 'un po' di confusione per me. Qualcuno può aiutare?

+0

Cosa intendi per tipo? 'define' non ha un valore di ritorno (e quindi nessun tipo di ritorno) in quanto non è un'espressione. – sepp2k

+0

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

+0

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

risposta

11

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.

+1

'define' non è un'espressione in Racket. Se lo usi in un contesto di espressione, ottieni un errore - non '# void'. – sepp2k

+0

ok, chiarirò che –

+0

Se scrivi solo 'define', allora potrebbe non essere un'espressione come hai detto tu. Ma scrivere '(define x 5)' o qualsiasi altra cosa di quel tipo è un'espressione al 100%. – TheEmeritus

Problemi correlati