[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Simple symbols as keywords

This page is part of the web mail archives of SRFI 89 from before July 7th, 2015. The new archives for SRFI 89 contain all messages, not just those from before July 7th, 2015.



For examples, we can use simple symbols as keywords as follows: 

((check-lambda (a
		b
		"opt" c
		"key" ((d dd) 30) e (f 40)
		. g)
   (list a b c d e f g))
 0 1 2 'dd 3 'f 6 'd 4 'dd 5)	=> unknown keysymbol d

((check-lambda (a
		b
		"opt" c
		"key" ((d dd) 30) e (f 40)
		"allow-other-keys"
		. g)
   (list a b c d e f g))
 0 1 2 'dd 3 'f 6 'd 4 'dd 5)	=> duplicate keysymbol dd

((check-lambda (a
		b
		"opt" c
		"key" ((d dd) 30) e (f 40)
		"allow-other-keys"
		"allow-duplicate-keys"
		. g)
   (list a b c d e f g))
 0 1 2 'dd 3 'f 6 'd 4 'dd 5)	=> (0 1 2 3 #f 6 (d 4 dd 5))

((check-lambda (a
		b
		"opt" c
		"key" ((d dd) 30) e (f 40)
		#t
		. g)
   (list a b c d e f g))
 0 1 2 'dd 3 'f 6 'd 4 'dd 5)	=> (0 1 2 3 #f 6 (d 4 dd 5))

The following is the specification:
(check-lambda  <formals> <body>)
(check-lambda* <formals> <body>)

<formals> -->
| (<required variable spec>* <fixed spec>* <named spec>* <option>)
| <variable>
| (<required variable spec>+ <fixed spec>* <named spec>* <option> .
<variable>)
| (<fixed spec>+ <named spec>* <option> . <variable>)
| (<named spec>+ <option> . <variable>)
| ("cat" . <variable>)
<required variable spec> --> <variable> | (<variable> <test>+)
<fixed spec> --> "opt" <fixed variable spec>*
<named spec> --> "key" <named variable spec>*
	       | "key" <named variable spec>+ <named option>
<fixed variable spec> --> <variable> | (<variable> <default value>
<test>*)
<named variable spec> --> <fixed variable spec>
			| ((<variable> <keyword name>))
			| ((<variable> <keyword name>) <default value>
<test>*)
<named option> --> #f | #t | <named option modifier>+
<named option modifier> --> "allow-other-keys"  | "allow-non-keys"
			  | "allow-duplicate-keys"
<option> --> "cat" | <empty>
<default value> --> <expression>
<test> --> <expression>
<keyword name> --> <identifier>

I can attach the implementation, if you want to take a look at it.

--
Joo ChurlSoo