(use-modules (ice-9 ftw) (srfi srfi-1)) (define (is-inner-lang? str) (and (not (member str '("glil" "glil.scm" "assembly" "assembly.scm" "bytecode" "objcode.scm" "objcode" "tree-il" "tree-il.scm" "value" ".." "."))) str)) (define (get-all-available-languages) (let lp((rest (map (lambda (x) (string-append x "/language")) %load-path)) (result '())) (cond ((null? rest) (apply lset-union string=? result)) (else (let ((ll (scandir (car rest) is-inner-lang?))) (lp (cdr rest) (if ll (cons ll result) result)))))))