Why define-values is not bound in a Racket macro with #lang racket/base?
up vote
3
down vote
favorite
I am trying to learn how to write Macros in Racket.
I've gone through the excellent Fear of Macros tutorial and am now trying to experiment with the basic ideas.
So I defined my-if
slightly differently from what was shown in the tutorial, and I am getting an error define-values: unbound identifier;
in:
#lang racket/base
(define-syntax (my-if stx)
(define-values (_ condition yes no)
(apply values (syntax->list stx)))
(datum->syntax stx `(if ,condition ,yes ,no)))
If I use #lang racket
instead of racket/base
it works.
Looking up the definition of define-values
in the Manual, it seems to be part of racket/base
!
define-values provided from racket/base, racket
So why is Racket complaining about this?
macros racket
add a comment |
up vote
3
down vote
favorite
I am trying to learn how to write Macros in Racket.
I've gone through the excellent Fear of Macros tutorial and am now trying to experiment with the basic ideas.
So I defined my-if
slightly differently from what was shown in the tutorial, and I am getting an error define-values: unbound identifier;
in:
#lang racket/base
(define-syntax (my-if stx)
(define-values (_ condition yes no)
(apply values (syntax->list stx)))
(datum->syntax stx `(if ,condition ,yes ,no)))
If I use #lang racket
instead of racket/base
it works.
Looking up the definition of define-values
in the Manual, it seems to be part of racket/base
!
define-values provided from racket/base, racket
So why is Racket complaining about this?
macros racket
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
I am trying to learn how to write Macros in Racket.
I've gone through the excellent Fear of Macros tutorial and am now trying to experiment with the basic ideas.
So I defined my-if
slightly differently from what was shown in the tutorial, and I am getting an error define-values: unbound identifier;
in:
#lang racket/base
(define-syntax (my-if stx)
(define-values (_ condition yes no)
(apply values (syntax->list stx)))
(datum->syntax stx `(if ,condition ,yes ,no)))
If I use #lang racket
instead of racket/base
it works.
Looking up the definition of define-values
in the Manual, it seems to be part of racket/base
!
define-values provided from racket/base, racket
So why is Racket complaining about this?
macros racket
I am trying to learn how to write Macros in Racket.
I've gone through the excellent Fear of Macros tutorial and am now trying to experiment with the basic ideas.
So I defined my-if
slightly differently from what was shown in the tutorial, and I am getting an error define-values: unbound identifier;
in:
#lang racket/base
(define-syntax (my-if stx)
(define-values (_ condition yes no)
(apply values (syntax->list stx)))
(datum->syntax stx `(if ,condition ,yes ,no)))
If I use #lang racket
instead of racket/base
it works.
Looking up the definition of define-values
in the Manual, it seems to be part of racket/base
!
define-values provided from racket/base, racket
So why is Racket complaining about this?
macros racket
macros racket
asked Nov 11 at 9:44
Renato
6,55513348
6,55513348
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
4
down vote
accepted
Use (require (for-syntax racket/base))
to import racket/base
also at phase 1 (compile time). Using #lang racket/base
provides define-values
only at phase 0 (runtime).
2
I hadn't thought of that because the tutorial mentioned thatAnd at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.
– Renato
Nov 11 at 13:30
1
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that#lang racket
requiresracket/base
at compile time. However#lang racket/base
doesn't do the same (which is a very natural thing to assume).
– soegaard
Nov 11 at 14:45
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
Use (require (for-syntax racket/base))
to import racket/base
also at phase 1 (compile time). Using #lang racket/base
provides define-values
only at phase 0 (runtime).
2
I hadn't thought of that because the tutorial mentioned thatAnd at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.
– Renato
Nov 11 at 13:30
1
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that#lang racket
requiresracket/base
at compile time. However#lang racket/base
doesn't do the same (which is a very natural thing to assume).
– soegaard
Nov 11 at 14:45
add a comment |
up vote
4
down vote
accepted
Use (require (for-syntax racket/base))
to import racket/base
also at phase 1 (compile time). Using #lang racket/base
provides define-values
only at phase 0 (runtime).
2
I hadn't thought of that because the tutorial mentioned thatAnd at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.
– Renato
Nov 11 at 13:30
1
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that#lang racket
requiresracket/base
at compile time. However#lang racket/base
doesn't do the same (which is a very natural thing to assume).
– soegaard
Nov 11 at 14:45
add a comment |
up vote
4
down vote
accepted
up vote
4
down vote
accepted
Use (require (for-syntax racket/base))
to import racket/base
also at phase 1 (compile time). Using #lang racket/base
provides define-values
only at phase 0 (runtime).
Use (require (for-syntax racket/base))
to import racket/base
also at phase 1 (compile time). Using #lang racket/base
provides define-values
only at phase 0 (runtime).
answered Nov 11 at 12:46
soegaard
23.9k43774
23.9k43774
2
I hadn't thought of that because the tutorial mentioned thatAnd at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.
– Renato
Nov 11 at 13:30
1
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that#lang racket
requiresracket/base
at compile time. However#lang racket/base
doesn't do the same (which is a very natural thing to assume).
– soegaard
Nov 11 at 14:45
add a comment |
2
I hadn't thought of that because the tutorial mentioned thatAnd at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.
– Renato
Nov 11 at 13:30
1
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that#lang racket
requiresracket/base
at compile time. However#lang racket/base
doesn't do the same (which is a very natural thing to assume).
– soegaard
Nov 11 at 14:45
2
2
I hadn't thought of that because the tutorial mentioned that
And at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.– Renato
Nov 11 at 13:30
I hadn't thought of that because the tutorial mentioned that
And at compile time, only racket/base is required for you automatically—not the full racket
... I guess I misundertood what that means.– Renato
Nov 11 at 13:30
1
1
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that
#lang racket
requires racket/base
at compile time. However #lang racket/base
doesn't do the same (which is a very natural thing to assume).– soegaard
Nov 11 at 14:45
@renato The tutorial has a note in the margin in section 3.1. Truth be told it can be a bit confusing in the beginning. In section 3.4 Greg explains that
#lang racket
requires racket/base
at compile time. However #lang racket/base
doesn't do the same (which is a very natural thing to assume).– soegaard
Nov 11 at 14:45
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247478%2fwhy-define-values-is-not-bound-in-a-racket-macro-with-lang-racket-base%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown