2019-11-08 03:19:27 +04:00
|
|
|
---
|
|
|
|
id: boolean-if-else
|
2020-02-05 19:28:40 +04:00
|
|
|
title: Booleans and Conditionals
|
2019-11-08 03:19:27 +04:00
|
|
|
---
|
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
import Syntax from '@theme/Syntax';
|
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
## Booleans
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
The type of a boolean value is `bool`. Here is how to define a boolean
|
|
|
|
value:
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
<Syntax syntax="pascaligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```pascaligo group=a
|
2020-02-25 21:07:53 +04:00
|
|
|
const a : bool = True // Also: true
|
|
|
|
const b : bool = False // Also: false
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="cameligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```cameligo group=a
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : bool = true
|
|
|
|
let b : bool = false
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="reasonligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```reasonligo group=a
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : bool = true;
|
|
|
|
let b : bool = false;
|
2019-12-10 17:47:31 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
|
2020-04-01 16:49:56 +04:00
|
|
|
Common operations:
|
|
|
|
|
|
|
|
<Syntax syntax="pascaligo">
|
|
|
|
<div className="boolean-example-table">
|
|
|
|
<div className="operation">
|
|
|
|
and
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical and
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const logical_and: bool = True and True;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
or
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical or
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const logical_or: bool = False or True;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
not
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical not
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const logical_not: bool = not False;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Equals
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const eq: bool = 2 = 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
=/=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Not equals
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const not_eq: bool = 2 =/= 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
>
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Greater than
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const gt: bool = 4 > 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Less than
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const lt: bool = 4 < 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
>=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Greater than or equal to
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const gte: bool = 4 >= 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Less than or equal to
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const lte: bool = 4 <= 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</Syntax>
|
|
|
|
|
|
|
|
<Syntax syntax="cameligo">
|
|
|
|
<div className="boolean-example-table">
|
|
|
|
<div className="operation">
|
|
|
|
&&
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical and
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let logical_and: bool = true && true
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
||
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical or
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let logical_or: bool = false || true
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
!
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical not
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let logical_not: bool = not false
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Equals
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let eq: bool = 2 = 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<>
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Not equals
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let not_eq: bool = 2 <> 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
>
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Greater than
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let gt: bool = 4 > 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Less than
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let lt: bool = 4 < 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
>=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Greater than or equal to
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let gte: bool = 4 >= 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Less than or equal to
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let lte: bool = 4 <= 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</Syntax>
|
|
|
|
|
|
|
|
<Syntax syntax="reasonligo">
|
|
|
|
<div className="boolean-example-table">
|
|
|
|
<div className="operation">
|
|
|
|
&&
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical and
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let logical_and: bool = true && true;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
||
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical or
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let logical_or: bool = false || true;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
!
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Logical not
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let logical_not: bool = !false;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
==
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Equals
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let eq: bool = 2 == 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
!=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Not equals
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let not_eq: bool = 2 != 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
>
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Greater than
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let gt: bool = 4 > 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Less than
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let lt: bool = 4 < 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
>=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Greater than or equal to
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let gte: bool = 4 >= 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="operation">
|
|
|
|
<=
|
|
|
|
</div>
|
|
|
|
<div className="description">
|
|
|
|
Less than or equal to
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let lte: bool = 4 <= 3;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</Syntax>
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-10 22:07:20 +04:00
|
|
|
## Comparing Values
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
In LIGO, only values of the same type can be compared. Moreover, not
|
|
|
|
all values of the same type can be compared, only those with
|
|
|
|
*comparable types*, which is a concept lifted from
|
|
|
|
Michelson. Comparable types include, for instance, `int`, `nat`,
|
2020-02-06 14:47:41 +04:00
|
|
|
`string`, `tez`, `timestamp`, `address`, etc. As an example of
|
|
|
|
non-comparable types: maps, sets or lists are not comparable: if you
|
|
|
|
wish to compare them, you will have to write your own comparison
|
|
|
|
function.
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
### Comparing Strings
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
<Syntax syntax="pascaligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```pascaligo group=b
|
2020-02-05 19:28:40 +04:00
|
|
|
const a : string = "Alice"
|
|
|
|
const b : string = "Alice"
|
|
|
|
const c : bool = (a = b) // True
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="cameligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```cameligo group=b
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : string = "Alice"
|
|
|
|
let b : string = "Alice"
|
|
|
|
let c : bool = (a = b) // true
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="reasonligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```reasonligo group=b
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : string = "Alice";
|
|
|
|
let b : string = "Alice";
|
|
|
|
let c : bool = (a == b); // true
|
2019-12-10 17:47:31 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
|
2019-11-08 03:19:27 +04:00
|
|
|
|
|
|
|
### Comparing numbers
|
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
<Syntax syntax="pascaligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```pascaligo group=c
|
2020-02-05 19:28:40 +04:00
|
|
|
const a : int = 5
|
|
|
|
const b : int = 4
|
|
|
|
const c : bool = (a = b)
|
|
|
|
const d : bool = (a > b)
|
|
|
|
const e : bool = (a < b)
|
|
|
|
const f : bool = (a <= b)
|
|
|
|
const g : bool = (a >= b)
|
|
|
|
const h : bool = (a =/= b)
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="cameligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```cameligo group=c
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : int = 5
|
|
|
|
let b : int = 4
|
|
|
|
let c : bool = (a = b)
|
|
|
|
let d : bool = (a > b)
|
|
|
|
let e : bool = (a < b)
|
|
|
|
let f : bool = (a <= b)
|
|
|
|
let g : bool = (a >= b)
|
|
|
|
let h : bool = (a <> b)
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2019-12-10 17:47:31 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="reasonligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```reasonligo group=c
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : int = 5;
|
|
|
|
let b : int = 4;
|
|
|
|
let c : bool = (a == b);
|
|
|
|
let d : bool = (a > b);
|
|
|
|
let e : bool = (a < b);
|
|
|
|
let f : bool = (a <= b);
|
|
|
|
let g : bool = (a >= b);
|
|
|
|
let h : bool = (a != b);
|
2019-12-10 17:47:31 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
|
2019-11-08 03:19:27 +04:00
|
|
|
|
|
|
|
### Comparing tez
|
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
> 💡 Comparing `tez` values is especially useful when dealing with an
|
|
|
|
> amount sent in a transaction.
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
<Syntax syntax="pascaligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```pascaligo group=d
|
2020-02-05 19:28:40 +04:00
|
|
|
const a : tez = 5mutez
|
|
|
|
const b : tez = 10mutez
|
2020-02-06 14:47:41 +04:00
|
|
|
const c : bool = (a = b) // False
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="cameligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```cameligo group=d
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : tez = 5mutez
|
|
|
|
let b : tez = 10mutez
|
|
|
|
let c : bool = (a = b) // false
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="reasonligo">
|
2020-04-01 16:49:56 +04:00
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```reasonligo group=d
|
2020-02-05 19:28:40 +04:00
|
|
|
let a : tez = 5mutez;
|
|
|
|
let b : tez = 10mutez;
|
|
|
|
let c : bool = (a == b); // false
|
2019-12-10 17:47:31 +04:00
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
|
2019-11-08 03:19:27 +04:00
|
|
|
|
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
## Conditionals
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-06 14:47:41 +04:00
|
|
|
Conditional logic enables forking the control flow depending on the
|
2020-02-05 19:28:40 +04:00
|
|
|
state.
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
<Syntax syntax="pascaligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```pascaligo group=e
|
2020-02-05 19:28:40 +04:00
|
|
|
type magnitude is Small | Large // See variant types.
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
function compare (const n : nat) : magnitude is
|
2020-02-25 21:07:53 +04:00
|
|
|
if n < 10n then Small else Large
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
You can run the `compare` function defined above using the LIGO compiler
|
|
|
|
like this:
|
|
|
|
```shell
|
|
|
|
ligo run-function
|
|
|
|
gitlab-pages/docs/language-basics/boolean-if-else/cond.ligo compare 21n'
|
2020-02-25 21:07:53 +04:00
|
|
|
# Outputs: Large(Unit)
|
2020-02-05 19:28:40 +04:00
|
|
|
```
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-12 01:29:12 +04:00
|
|
|
When the branches of the conditional are not a single expression, as
|
|
|
|
above, we need a block:
|
|
|
|
|
|
|
|
```pascaligo skip
|
|
|
|
if x < y then
|
|
|
|
block {
|
|
|
|
const z : nat = x;
|
|
|
|
x := y; y := z
|
|
|
|
}
|
|
|
|
else skip;
|
|
|
|
```
|
|
|
|
|
|
|
|
As an exception to the rule, the blocks in a conditional branch do not
|
2020-02-25 21:07:53 +04:00
|
|
|
need to be introduced by the keyword `block`, so we could have written
|
2020-02-12 01:29:12 +04:00
|
|
|
instead:
|
|
|
|
```pascaligo skip
|
|
|
|
if x < y then {
|
|
|
|
const z : nat = x;
|
|
|
|
x := y; y := z
|
|
|
|
}
|
|
|
|
else skip;
|
|
|
|
```
|
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="cameligo">
|
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```cameligo group=e
|
2020-02-05 19:28:40 +04:00
|
|
|
type magnitude = Small | Large // See variant types.
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
let compare (n : nat) : magnitude =
|
|
|
|
if n < 10n then Small else Large
|
|
|
|
```
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
You can run the `compare` function defined above using the LIGO compiler
|
|
|
|
like this:
|
|
|
|
```shell
|
|
|
|
ligo run-function
|
|
|
|
gitlab-pages/docs/language-basics/boolean-if-else/cond.mligo compare 21n'
|
|
|
|
# Outputs: Large
|
2019-11-08 03:19:27 +04:00
|
|
|
```
|
2020-02-05 19:28:40 +04:00
|
|
|
|
2020-02-25 21:07:53 +04:00
|
|
|
> Notice that, as in OCaml, in CameLIGO, if a conditional has a branch
|
|
|
|
> `else ()`, that branch can be omitted. The resulting so-called
|
|
|
|
> *dangling else* problem is parsed by associating any `else` to the
|
|
|
|
> closest previous `then`.
|
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="reasonligo">
|
2020-02-25 21:07:53 +04:00
|
|
|
|
2019-12-26 02:38:37 +04:00
|
|
|
```reasonligo group=e
|
2020-02-25 21:07:53 +04:00
|
|
|
type magnitude = Small | Large; // See variant types.
|
2019-12-10 17:47:31 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
let compare = (n : nat) : magnitude =>
|
|
|
|
if (n < 10n) { Small; } else { Large; };
|
2019-12-10 17:47:31 +04:00
|
|
|
```
|
2019-11-08 03:19:27 +04:00
|
|
|
|
2020-02-05 19:28:40 +04:00
|
|
|
You can run the `compare` function defined above using the LIGO compiler
|
|
|
|
like this:
|
|
|
|
```shell
|
|
|
|
ligo run-function
|
|
|
|
gitlab-pages/docs/language-basics/boolean-if-else/cond.religo compare 21n'
|
|
|
|
# Outputs: Large
|
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
</Syntax>
|
|
|
|
|