add docstrings to functions in util and remove unused function, fixes #58

This commit is contained in:
Morgan Astra 2016-09-21 21:36:39 -07:00
parent 4fc7685f16
commit 02426e681b

View File

@ -18,21 +18,25 @@
(:require [clojure.string :as s])) (:require [clojure.string :as s]))
(defn slurp-tabfile [path] (defn slurp-tabfile [path]
"read a tabfile from a filesystem <path> as a table"
(let [lines (s/split (slurp path) #"\n")] (let [lines (s/split (slurp path) #"\n")]
(map #(s/split % #"\t") lines))) (map #(s/split % #"\t") lines)))
(defn table-front-filter (defn table-front-filter
"filter a <table> to the rows which begin with <query-key>"
[query-key table] [query-key table]
(let [arity (count query-key)] (let [arity (count query-key)]
(filter #(= query-key (take arity %)) table))) (filter #(= query-key (take arity %)) table)))
(defn table-end-filter (defn table-end-filter
"filter a <table> to the rows which end with <query-key>"
[query-key table] [query-key table]
(let [table-arity (count (first table)) (let [table-arity (count (first table))
query-arity (count query-key)] query-arity (count query-key)]
(filter #(= query-key (drop (- table-arity query-arity) %)) table))) (filter #(= query-key (drop (- table-arity query-arity) %)) table)))
(defn table-lookup (defn table-lookup
"find the row corresponding to <query-key> in <table>"
[query-key table] [query-key table]
(if (some #(= "..." %) query-key) (if (some #(= "..." %) query-key)
(let [[query-front query-end-] (split-with #(not= "..." %) query-key) (let [[query-front query-end-] (split-with #(not= "..." %) query-key)
@ -41,25 +45,26 @@
(first (table-end-filter query-end front-matches))) (first (table-end-filter query-end front-matches)))
(first (table-front-filter query-key table)))) (first (table-front-filter query-key table))))
(defn tabfile-lookup
[query-key tabfile]
(table-lookup query-key (slurp-tabfile tabfile)))
(defn minimum-unambiguous-path (defn minimum-unambiguous-path
([table columns] (minimum-unambiguous-path table columns 1)) "compute the shortest (in number of path elements) path which refers to
([table columns number-of-columns] a specific <row> in a <table> unambiguously."
(let [columns-subset (take number-of-columns columns) ([table row] (minimum-unambiguous-path table row 1))
results (filter #(= (take number-of-columns %) columns-subset) ([table row number-of-row]
(let [row-subset (take number-of-row row)
results (filter #(= (take number-of-row %) row-subset)
table)] table)]
(case (count results) (case (count results)
0 nil 0 nil
1 (clojure.string/join "/" columns-subset) 1 (clojure.string/join "/" row-subset)
(recur table columns (+ number-of-columns 1)))))) (recur table row (+ number-of-row 1))))))
(defn abbreviate (defn abbreviate
"given a list of pronoun rows, return a list of minimum unabiguous paths" "return the list of minimum unabiguous paths from a <table>"
[table] [table]
(map (partial minimum-unambiguous-path table) table)) (map (partial minimum-unambiguous-path table) table))
(defn vec-coerce [x] (defn vec-coerce [x]
"wrap a value <x> in a vector if it is not already in one. note that if
<x> is already in a sequence for which vector? is false, this will add
another layer of nesting."
(if (vector? x) x [x])) (if (vector? x) x [x]))