Conlang/sample-code/letter_frequency.cl

47 lines
990 B
Common Lisp
Executable File

#!/usr/bin/env -S conlang -r false
// Showcases `get_line` behavior by sorting stdin
fn in_range(this: Ord, min: Ord, max: Ord) -> bool {
min < this && this < max
}
fn frequency(s: str) -> [i32; 128] {
let letters = [0; 128];
for letter in s {
if (letter).in_range(' ', letters.len() as char) {
letters[(letter as i32)] += 1;
}
}
letters
}
fn plot_freq(freq: [i32; 128]) -> str {
let buf = "";
for idx in 0..len(freq) {
for n in 0..(freq[idx]) {
buf += idx as char;
}
}
buf
}
const msg: str = "letter_frequency.cl
Computes the frequency of ascii characters in a block of text, and prints it bucket-sorted.
Press Ctrl+D to quit.";
fn main() {
println(msg);
let lines = "";
loop {
let line = get_line();
if line == "" {
break ();
}
lines += line;
}
let freq = frequency(lines);
let plot = plot_freq(freq);
println(plot)
}