1
0
Fork 0
cl-sites/novaspec.org/cl/f_when.html
2025-02-05 18:52:26 +01:00

668 lines
No EOL
12 KiB
HTML

<!DOCTYPE HTML>
<HTML LANG="en-us"
><HEAD
><TITLE
>when, unless | Common Lisp Nova Spec</TITLE
><META CHARSET="US-ASCII"
><LINK REL="canonical" HREF="f_when.html"
><LINK REL="next" HREF="f_case.html" TYPE="text/html" TITLE="case, ccase, ecase"
><LINK REL="prev" HREF="f_or.html" TYPE="text/html" TITLE="or"
><LINK REL="up" HREF="5_3_Data_and_Control_Flow_Dictionary.html" TYPE="text/html" TITLE="5.3 Data and Control Flow Dictionary"
><LINK REL="start" HREF="index.html" TYPE="text/html" TITLE="Common Lisp Nova Spec"
><META NAME="VIEWPORT" CONTENT="width=device-width, initial-scale=1.0"
><LINK REL="STYLESHEET" HREF="dpans.css%3F3909942064.css"
><SCRIPT SRC="dpans.js%3F3909942064"
></SCRIPT
><SCRIPT SRC="apropos.js%3F3909942064"
></SCRIPT
></HEAD
><BODY
><DIV
><DIV CLASS="topnav"
><DIV CLASS="breadcrumb"
><SPAN CLASS="breadcrumb-item"
><A HREF="index.html"
>Common Lisp Nova Spec</A
></SPAN
> <SPAN CLASS="breadcrumb-item"
>&#8594; <A HREF="5_Data_and_Control_Flow.html"
>5. Data and Control Flow</A
></SPAN
> <SPAN CLASS="breadcrumb-item"
>&#8594; <A HREF="5_3_Data_and_Control_Flow_Dictionary.html"
>5.3 Data and Control Flow Dictionary</A
></SPAN
> <SPAN CLASS="breadcrumb-item"
>&#8594; <A HREF="f_when.html"
>when, unless</A
></SPAN
></DIV
><DIV CLASS="apropos"
><DIV CLASS="apropos-io"
><A HREF="f_or.html" CLASS="prev"
>&#8592;</A
><SPAN ID="apropos-label"
>Apropos </SPAN
><INPUT ID="apropos" AUTOFOCUS="AUTOFOCUS" PLACEHOLDER="Type here to search" ONINPUT="aproposInput(this);" ONKEYUP="aproposKeyup(event);" ONCHANGE="aproposChange(this);" ONFOCUS="aproposFocus(this);" ONFOCUSOUT="aproposFocusout(this);"
><A HREF="f_case.html" CLASS="next"
>&#8594;</A
></DIV
><DIV ID="apropos-res"
></DIV
></DIV
></DIV
><DIV CLASS="matter"
><DIV CLASS="com"
><DIV CLASS="begincom"
><HR
><TABLE WIDTH="100%" CELLSPACING="0" CELLPADDING="0"
><TR
><TD ALIGN="LEFT" VALIGN="BASELINE" WIDTH="100%" CLASS="name"
><SPAN CLASS="idx" DATA-KIND="idxref" DATA-TERM="when, unless"
></SPAN
><B
>when, unless</B
></TD
><TD ALIGN="RIGHT" VALIGN="BASELINE" WIDTH="0" NOWRAP="NOWRAP" CLASS="ftype"
><I
>Macro</I
></TD
></TR
></TABLE
><HR
></DIV
><UL CLASS="subtoc"
></UL
><DL
><DT
><B
>Syntax</B
></DT
><DD
><P CLASS="j"
><B
>when</B
> <SPAN CLASS="cmssi"
>test-form</SPAN
> {<VAR CLASS="param"
>form</VAR
>}* <SPAN CLASS="arrow"
>&#8594;</SPAN
> {<VAR CLASS="param"
>result</VAR
>}*</P
><P CLASS="j"
><B
>unless</B
> <SPAN CLASS="cmssi"
>test-form</SPAN
> {<VAR CLASS="param"
>form</VAR
>}* <SPAN CLASS="arrow"
>&#8594;</SPAN
> {<VAR CLASS="param"
>result</VAR
>}*</P
></DD
><DT
><B
>Arguments and Values</B
></DT
><DD
><P CLASS="j"
><VAR CLASS="param"
>test-form</VAR
> &#8212; a <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>forms</VAR
> &#8212; an <A HREF="26_1_Glossary.html#implicit_progn"
><EM CLASS="term"
>implicit progn</EM
></A
>. </P
><P CLASS="j"
><VAR CLASS="param"
>results</VAR
> &#8212; the <A HREF="26_1_Glossary.html#value"
><EM CLASS="term"
>values</EM
></A
> of the <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>forms</EM
></A
> in a <A HREF="f_when.html" CLASS="macref"
><B
>when</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
> if the <VAR CLASS="param"
>test-form</VAR
> <A HREF="26_1_Glossary.html#yield"
><EM CLASS="term"
>yields</EM
></A
> <A HREF="26_1_Glossary.html#true"
><EM CLASS="term"
>true</EM
></A
> or in an <A HREF="f_when.html" CLASS="macref"
><B
>unless</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
> if the <VAR CLASS="param"
>test-form</VAR
> <A HREF="26_1_Glossary.html#yield"
><EM CLASS="term"
>yields</EM
></A
> <A HREF="26_1_Glossary.html#false"
><EM CLASS="term"
>false</EM
></A
>; otherwise <SPAN CLASS="misc"
><B
>nil</B
></SPAN
>.</P
></DD
><DT
><B
>Description</B
></DT
><DD
><P CLASS="j"
><A HREF="f_when.html" CLASS="macref"
><B
>when</B
></A
> and <A HREF="f_when.html" CLASS="macref"
><B
>unless</B
></A
> allow the execution of <VAR CLASS="param"
>forms</VAR
> to be dependent on a single <VAR CLASS="param"
>test-form</VAR
>. </P
><P CLASS="j"
>In a <A HREF="f_when.html" CLASS="macref"
><B
>when</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
>, if the <VAR CLASS="param"
>test-form</VAR
> <A HREF="26_1_Glossary.html#yield"
><EM CLASS="term"
>yields</EM
></A
> <A HREF="26_1_Glossary.html#true"
><EM CLASS="term"
>true</EM
></A
>, the <VAR CLASS="param"
>forms</VAR
> are <A HREF="26_1_Glossary.html#evaluate"
><EM CLASS="term"
>evaluated</EM
></A
> in order from left to right and the <A HREF="26_1_Glossary.html#value"
><EM CLASS="term"
>values</EM
></A
> returned by the <VAR CLASS="param"
>forms</VAR
> are returned from the <A HREF="f_when.html" CLASS="macref"
><B
>when</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
>. Otherwise, if the <VAR CLASS="param"
>test-form</VAR
> <A HREF="26_1_Glossary.html#yield"
><EM CLASS="term"
>yields</EM
></A
> <A HREF="26_1_Glossary.html#false"
><EM CLASS="term"
>false</EM
></A
>, the <VAR CLASS="param"
>forms</VAR
> are not <A HREF="26_1_Glossary.html#evaluate"
><EM CLASS="term"
>evaluated</EM
></A
>, and the <A HREF="f_when.html" CLASS="macref"
><B
>when</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
> returns <SPAN CLASS="misc"
><B
>nil</B
></SPAN
>. </P
><P CLASS="j"
>In an <A HREF="f_when.html" CLASS="macref"
><B
>unless</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
>, if the <VAR CLASS="param"
>test-form</VAR
> <A HREF="26_1_Glossary.html#yield"
><EM CLASS="term"
>yields</EM
></A
> <A HREF="26_1_Glossary.html#false"
><EM CLASS="term"
>false</EM
></A
>, the <VAR CLASS="param"
>forms</VAR
> are <A HREF="26_1_Glossary.html#evaluate"
><EM CLASS="term"
>evaluated</EM
></A
> in order from left to right and the <A HREF="26_1_Glossary.html#value"
><EM CLASS="term"
>values</EM
></A
> returned by the <VAR CLASS="param"
>forms</VAR
> are returned from the <A HREF="f_when.html" CLASS="macref"
><B
>unless</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
>. Otherwise, if the <VAR CLASS="param"
>test-form</VAR
> <A HREF="26_1_Glossary.html#yield"
><EM CLASS="term"
>yields</EM
></A
> <A HREF="26_1_Glossary.html#false"
><EM CLASS="term"
>false</EM
></A
>, the <VAR CLASS="param"
>forms</VAR
> are not <A HREF="26_1_Glossary.html#evaluate"
><EM CLASS="term"
>evaluated</EM
></A
>, and the <A HREF="f_when.html" CLASS="macref"
><B
>unless</B
></A
> <A HREF="26_1_Glossary.html#form"
><EM CLASS="term"
>form</EM
></A
> returns <SPAN CLASS="misc"
><B
>nil</B
></SPAN
>.</P
></DD
><DT
><B
>Examples</B
></DT
><DD
><PRE CLASS="screen"
> (when t 'hello) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> HELLO
(unless t 'hello) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> NIL
(when nil 'hello) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> NIL
(unless nil 'hello) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> HELLO
(when t) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> NIL
(unless nil) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> NIL
(when t (prin1 1) (prin1 2) (prin1 3))
<SPAN CLASS="cmr"
>&#8883;</SPAN
> 123
<SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> 3
(unless t (prin1 1) (prin1 2) (prin1 3)) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> NIL
(when nil (prin1 1) (prin1 2) (prin1 3)) <SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> NIL
(unless nil (prin1 1) (prin1 2) (prin1 3))
<SPAN CLASS="cmr"
>&#8883;</SPAN
> 123
<SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> 3
(let ((x 3))
(list (when (oddp x) (incf x) (list x))
(when (oddp x) (incf x) (list x))
(unless (oddp x) (incf x) (list x))
(unless (oddp x) (incf x) (list x))
(if (oddp x) (incf x) (list x))
(if (oddp x) (incf x) (list x))
(if (not (oddp x)) (incf x) (list x))
(if (not (oddp x)) (incf x) (list x))))
<SPAN CLASS="cmsy"
><SPAN CLASS="arrow"
>&#8594;</SPAN
></SPAN
> ((4) NIL (5) NIL 6 (6) 7 (7))</PRE
></DD
><DT
><B
>See Also</B
></DT
><DD
><P CLASS="j"
><A HREF="f_and.html" CLASS="macref"
><B
>and</B
></A
>, <A HREF="f_cond.html" CLASS="macref"
><B
>cond</B
></A
>, <A HREF="f_if.html" CLASS="specref"
><B
>if</B
></A
>, <A HREF="f_or.html" CLASS="macref"
><B
>or</B
></A
></P
></DD
><DT
><B
>Notes</B
></DT
><DD
><PRE CLASS="screen"
>(when <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (and <VAR CLASS="param"
>test</VAR
> (progn <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>))
(when <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (cond (<VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>))
(when <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (if <VAR CLASS="param"
>test</VAR
> (progn <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) nil)
(when <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (unless (not <VAR CLASS="param"
>test</VAR
>) <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>)
(unless <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (cond ((not <VAR CLASS="param"
>test</VAR
>) <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>))
(unless <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (if <VAR CLASS="param"
>test</VAR
> nil (progn <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>))
(unless <VAR CLASS="param"
>test</VAR
> <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>) <SPAN CLASS="cmsy"
><SPAN STYLE="font-size:16px;vertical-align:-2px"
>&#8801;</SPAN
></SPAN
> (when (not <VAR CLASS="param"
>test</VAR
>) <SPAN CLASS="cmsy"
>{</SPAN
><VAR CLASS="param"
>form</VAR
><SPAN CLASS="cmsy"
>}</SPAN
><SUP CLASS="sup"
><SPAN CLASS="cmtt"
>+</SPAN
></SUP
>)</PRE
></DD
></DL
></DIV
></DIV
><DIV CLASS="footer"
><DIV CLASS="btmnav"
><A HREF="f_or.html" CLASS="prev"
>&#8592;</A
><A HREF="f_case.html" CLASS="next"
>&#8594;</A
></DIV
><DIV CLASS="trail"
>Conversion to HTML copyright 2023 by Gilbert Baumann</DIV
></DIV
></DIV
><SCRIPT
>domReady();</SCRIPT
></BODY
></HTML
>