#!/usr/bin/env sh # -*- wisp -*- exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -e '(@@ (examples power-iteration) main)' -s "$0" "$@" ; !# ;; Power iteration, following https://en.wikipedia.org/wiki/Power_iteration#The_method define-module : examples power-iteration . #:export : step import : srfi srfi-1 define A '((1 2 3) (1 2 3) (1 2 4)) define b '(1 1 1) define : M*v A b . "Matrix by vector product" if : = 0 : length A . '() let lp : (res '()) (head 0) (i 0) (j 0) cond {i >= (length A)} reverse res {j >= (length (list-ref A 0))} lp (cons head res) 0 (+ 1 i) 0 else lp res + head * : list-ref (list-ref A i) j list-ref b j . i + 1 j define : main args write : M*v A b newline