#!/usr/bin/env sh
# -*- wisp -*-
guile -L $(dirname $(dirname $(realpath "$0"))) -c '(import (wisp-scheme) (language wisp spec))'
exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -s "$0" "$@"
; !#
;; Having fun with unicode and math :)
define : Σ . n
apply + n
define : Π . n
apply * n
define : ∪ . lists
apply append lists
define : ∩ list1 list2
let : : h : make-hash-table : length list2
let fill : : toadd list2
when : not : equal? toadd '()
hash-set! h (list-ref toadd 0) #t
fill : list-tail toadd 1
let loop : (inboth '()) (tocheck list1)
if : equal? tocheck '()
. inboth
let : : cur : list-ref tocheck 0
if : hash-ref h cur
loop
append inboth : list cur
list-tail tocheck 1
loop inboth : list-tail tocheck 1
display : Σ 1 2 8 0 5 7 59 12 5
newline
display : Π 1 2 8 0 5 7 59 12 5
newline
display : ∪ '(1 2 3) '(4 5 6)
newline
display : ∩ '(1 789 7 897 89 78 78 97 89 2 3 6) '(4 5 6 2 8 7 879 879 879 879 8797 97 97 987 89789 7 7897 987 897 987 87 897 896)
newline