Conditional structures: Difference between revisions

Content added Content deleted
No edit summary
Line 5,237: Line 5,237:


=={{header|Ol}}==
=={{header|Ol}}==
if-then, the simplest conditional primitive.
if-then, the simplest conditional `if` primitive.
<syntaxhighlight lang="scheme">
<syntaxhighlight lang="scheme">
(if (= (* 2 2) 4) (print "if-then: equal"))
(if (= (* 2 2) 4)
(if (= (* 2 2) 6) (print "if-then: non equal"))
(print "if-then: equal"))
(if (= (* 2 2) 6)
(print "if-then: should not be printed"))
; ==> if-then: equal
; ==> if-then: equal
</syntaxhighlight>
</syntaxhighlight>


if-then-else, the full conditional 'if' primitive.
if-then-else, the full conditional `if` primitive.
<syntaxhighlight lang="scheme">
<syntaxhighlight lang="scheme">
(if (= (* 2 2) 4) (print "if-then-else: equal") (print "if-then-else: non equal"))
(if (= (* 2 2) 4)
(if (= (* 2 2) 6) (print "if-then-else: non equal") (print "if-then-else: i don't know"))
(print "if-then-else: equal")
(print "if-then-else: non equal"))
; ==> if-then-else: equal
; ==> if-then-else: equal

; ==> if-then-else: i don't know
(if (= (* 2 2) 6)
(print "if-then-else: equal")
(print "if-then-else: non equal"))
; ==> if-then-else: non equal
</syntaxhighlight>
</syntaxhighlight>


unless, the opposite for 'if'.
when and unless, the simplification of `if` without `begin`
<syntaxhighlight lang="scheme">
<syntaxhighlight lang="scheme">
(unless (= (* 2 2) 4) (print "unless: non equal"))
(when (= (* 2 2) 4)
(unless (= (* 2 2) 6) (print "unless: i don't know"))
(print "when: ..just do something..")
(unless (= (* 2 2) 4) (print "unless: non equal") (print "unless: equal"))
(print "when: equal"))
; ==> when: ..just do something..
(unless (= (* 2 2) 6) (print "unless: i don't know") (print "unless: non equal"))
; ==> unless: i don't know
; ==> when: equal

; ==> unless: equal
(unless (= (* 2 2) 6)
; ==> unless: i don't know
(print "unless: ..just do something..")
(print "unless: not equal"))
; ==> unless: ..just do something..
; ==> unless: not equal
</syntaxhighlight>

if-then-else, extended conditional `if` primitive.
<syntaxhighlight lang="scheme">
(if (= (* 2 2) 4)
(print "if-then-else*: equal")
else
(print "if-then-else*: ..just do something..")
(print "if-then-else*: non equal"))
; ==> if-then-else*: equal

(if (= (* 2 2) 4)
then
(print "if-then-else*: ..just do something..")
(print "if-then-else*: equal")
else
(print "if-then-else*: ..just do something..")
(print "if-then-else*: non equal"))
; ==> if-then-else*: ..just do something..
; ==> if-then-else*: equal

(if (= (* 2 2) 4) ; same as `when`
then
(print "if-then-else*: ..just do something..")
(print "if-then-else*: equal"))
; ==> if-then-else*: ..just do something..
; ==> if-then-else*: equal
</syntaxhighlight>
</syntaxhighlight>


Line 5,266: Line 5,304:
<syntaxhighlight lang="scheme">
<syntaxhighlight lang="scheme">
(case (* 2 2)
(case (* 2 2)
(3
(3 ; exact number
(print "case: 3"))
(print "case: 3"))
(4
(4 ; exact number
(print "case: 4"))
(print "case: 4"))
((5 6 7)
((5 6 7) ; list of numbers
(print "case: 5 or 6 or 7"))
(print "case: 5 or 6 or 7"))
(else
(else
(print "case: i don't know")))
(print "case: i don't know")))
; ==> case: 4
; ==> case: 4
</syntaxhighlight>


; extended case with usable else
additionally, case can select vectors with variables filling
(case (* 2 2)
<syntaxhighlight lang="scheme">
(3 ; exact number
(case (vector 'selector 1 2 3)
(print "case: 3"))
(else => (lambda (num)
(print "case: real value is " num))))
; ==> case: real value is 4

(case (* 2 2)
(3 ; exact number
(print "case: 3"))
(else is num
(print "case: real value is " num)))
; ==> case: real value is 4

; extended case with vectors
(case ['selector 1 2 3]
(['case1 x y]
(['case1 x y]
(print "case: case1 " x ", " y))
(print "case: case1 " x ", " y))
Line 5,286: Line 5,337:
(else
(else
(print "case: i don't know")))
(print "case: i don't know")))
; ==> tuple-case: selector 1, 2, 3
; ==> case: selector 1, 2, 3
</syntaxhighlight>
</syntaxhighlight>