Rewrite main.scm so it does not read the whole wordlist at once

This commit is contained in:
heyarne 2022-07-08 16:40:09 +02:00
commit 39cbc34e18
3 changed files with 46 additions and 33 deletions

3
.envrc
View file

@ -1 +1,4 @@
use flake use flake
export CHICKEN_REPOSITORY_PATH="$(pwd)/.eggs"
export CHICKEN_INSTALL_REPOSITORY="$(pwd)/.eggs"

View file

@ -30,22 +30,21 @@
}; };
in { in {
devShells.default = pkgs.mkShell rec { devShells.default = pkgs.mkShell rec {
buildInputs = [ buildInputs = with pkgs; [
lua chicken
# fennel openssl
pkgs.chicken gcc
# pkgs.guile_3_0
# pkgs.gcc
# pkgs.gambit
]; ];
LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}"; LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}";
}; };
packages.default = pkgs.mkDerivation rec { packages.default = pkgs.stdenv.mkDerivation rec {
buildInputs = [ name = "seizethemeans";
pkgs.chicken src = ./.;
# pkgs.guile_3_0
pkgs.gcc buildInputs = with pkgs; [
pkgs.gambit chicken
openssl
gcc
]; ];
buildPhase = '' buildPhase = ''
@ -53,6 +52,11 @@
gcc gcc
''; '';
installPhase = ''
mkdir -p $out/bin
cp main $out/bin/seize-the-means
'';
LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}"; LD_LIBRARY_PATH = "${lib.makeLibraryPath buildInputs}";
}; };
}); });

View file

@ -1,34 +1,40 @@
(import (chicken io) (import (chicken condition)
(chicken io)
(chicken process-context) (chicken process-context)
(chicken random) (chicken random)
(chicken format)) (chicken format))
(define *api-url* (get-environment-variable "MASTODON_API_URL")) (define *api-url* (get-environment-variable "MASTODON_API_URL"))
(define *access-token* (get-environment-variable "MASTODON_ACCESS_TOKEN")) (define *access-token* (get-environment-variable "MASTODON_ACCESS_TOKEN"))
(define file "./words.txt")
(define (file-lines file-path) (define (file-num-lines file-path)
(let ((file (open-input-file file-path))) (let ((file (open-input-file file-path)))
(let loop ((lines '()) (let loop ((num-lines 0))
(cur (read-line file))) (if (eof-object? (read-line file))
(if (eof-object? cur)
(begin (close-input-port file) (begin (close-input-port file)
(reverse lines)) num-lines)
(loop (cons cur lines) (loop (+ 1 num-lines))))))
(read-line file))))))
(define lines (file-lines "./words.txt")) (define (file-line-at file-path n)
(let ((file (open-input-file file-path)))
(let loop ((m 0)
(cur (read-line file)))
(cond
((= m n)
(begin
(close-input-port file)
cur))
(define (list-nth ls n) ((eof-object? cur)
(if (zero? n) (begin
(car ls) (close-input-port file)
(list-nth (cdr ls) (- n 1)))) (signal (format "~s is greater than the number of lines in ~s" n file-path))))
(define (list-remove-nth ls n) (else (loop (+ 1 m) (read-line file)))))))
(if (zero? n)
(cdr ls)
(cons (car ls) (list-remove-nth (cdr ls) (- n 1)))))
(let ((nth (pseudo-random-integer (length lines)))) (let* ((n (pseudo-random-integer (file-num-lines file)))
(line (file-line-at file n)))
(display "Seize the means of ") (display "Seize the means of ")
(display (list-nth lines nth)) (display line)
(display "\n")) (display "\n"))