Skip to content

Commit 1838581

Browse files
committed
feat(samples): add quicksort example script
1 parent 06c6c78 commit 1838581

4 files changed

Lines changed: 25 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ All notable changes to FScript are documented in this file.
44

55
## [Unreleased]
66

7+
- Added `samples/quicksort.fss` with a recursive quicksort example over integer lists.
8+
79
## [0.43.0]
810

911

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ dotnet run --project src/FScript --
115115
Useful samples:
116116
- [`samples/types-showcase.fss`](samples/types-showcase.fss)
117117
- [`samples/patterns-and-collections.fss`](samples/patterns-and-collections.fss)
118+
- [`samples/quicksort.fss`](samples/quicksort.fss)
118119
- [`samples/tree.fss`](samples/tree.fss)
119120
- [`samples/mutual-recursion.fss`](samples/mutual-recursion.fss)
120121
- [`samples/imports-and-exports.fss`](samples/imports-and-exports.fss)

docs/guides/getting-started-tutorial.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ When embedding, keep this mindset:
426426
- Sample scripts:
427427
- [`samples/types-showcase.fss`](../../samples/types-showcase.fss)
428428
- [`samples/patterns-and-collections.fss`](../../samples/patterns-and-collections.fss)
429+
- [`samples/quicksort.fss`](../../samples/quicksort.fss)
429430
- [`samples/map-matching.fss`](../../samples/map-matching.fss)
430431
- [`samples/imports-and-exports.fss`](../../samples/imports-and-exports.fss)
431432
- Specifications index: [`docs/specs/README.md`](../specs/README.md)

samples/quicksort.fss

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
let rec quicksort values =
2+
match values with
3+
| [] -> []
4+
| pivot :: rest ->
5+
let smaller = rest |> List.filter (fun value -> value < pivot)
6+
let equal = rest |> List.filter (fun value -> value = pivot)
7+
let greater = rest |> List.filter (fun value -> value > pivot)
8+
(quicksort smaller) @ [pivot] @ equal @ (quicksort greater)
9+
10+
let rec is_sorted values =
11+
match values with
12+
| [] -> true
13+
| [_] -> true
14+
| first :: second :: tail -> (first <= second) && (is_sorted (second :: tail))
15+
16+
let input = [9; 2; 8; 2; 4; 7; 1; 6; 3; 5; 3]
17+
let sorted = quicksort input
18+
19+
print $"quicksort input : {input}"
20+
print $"quicksort output: {sorted}"
21+
print $"is sorted : {is_sorted sorted}"

0 commit comments

Comments
 (0)