This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Data.List | |
import Data.Maybe | |
stableMatch :: (Eq m, Eq w) => [(m,[w])] -> [(w,[m])] -> [(m,w)] | |
stableMatch ms ws = stableMatch' [] | |
where | |
stableMatch' ps = case unmarried ms ps of | |
Just unmarriedMan -> stableMatch' (findMatch unmarriedMan ws ps) | |
Nothing -> ps | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dtw :: V.Vector a -> V.Vector a -> (a -> a -> Int) -> Array (Int,Int) Int | |
dtw x y cost = runSTArray $ do | |
let n = V.length x | |
m = V.length y | |
maxcost = maxBound | |
d <- newArray ((0,0),(m,n)) 0 | |
forM_ [1..n] (\i -> writeArray d (0,i) maxcost) | |
forM_ [1..m] (\i -> writeArray d (i,0) maxcost) | |
forM_ [1..n] $ \i -> | |
forM_ [1..m] $ \j -> do |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dtwWin :: V.Vector a -> V.Vector a -> (a -> a -> Int) -> Int -> Array (Int,Int) Int | |
dtwWin x y cost window = runSTArray $ do | |
let n = V.length x | |
m = V.length y | |
maxCost = maxBound | |
w = max window (abs (n - m)) -- constrain window size | |
d <- newArray ((0,0),(m,n)) maxCost | |
writeArray d (0,0) 0 | |
forM_ [1..n] $ \i -> | |
forM_ [max 1 (i-w) .. min m (i+w)] $ \j -> do |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
warpingPath :: Array (Int,Int) Int -> [(Int,Int)] | |
warpingPath arr = go (w,h) [] | |
where | |
(_,(w,h)) = bounds arr | |
go p@(x,y) xs | |
| x == 0 && y == 0 = p : xs | |
| otherwise = go minVal (minVal : xs) | |
where | |
minVal = minimumBy (comparing (arr !)) [down,downLeft,left] | |
down = (max 0 (x-1),max 0 y) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var foos = new List<int>{1,2,3,4}; | |
var bars = new List<int>(); | |
foreach(var foo in foos) { | |
Console.WriteLine("hello"); | |
bars.Add(x*2); | |
} | |
// versus. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn contains-value? | |
[coll val] | |
(not (nil? (some (partial = val) coll)))) | |
(defn executing? | |
[x] | |
"Is x of the form: (executing ...)?" | |
(and (seq? x) (= 'executing (first x)))) | |
(defn convert-op |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(deftest test-pattern-matching | |
(is (= fail (pat-match '(i need a ?X) '(i really need a vacation)))) | |
(is (= no-bindings (pat-match '(this is easy) '(this is easy)))) | |
(is (= fail (pat-match '(?X is ?X) '((2 + 2 is 4))))) | |
(is (= '{?X (2 + 2)} (pat-match '(?X is ?X) '((2 + 2) is (2 + 2))))) | |
(is (= '{?P (Mr Hulot and I) ?X (a vacation)} (pat-match '((?* ?P) need (?* ?X)) | |
'(Mr Hulot and I need a vacation)))) | |
(is (= '{?X (1 2 a b)} (pat-match '((?* ?X) a b (?* ?X)) '(1 2 a b a b 1 2 a b))))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn read-symbol | |
"Read a single symbol from a string returning nil on failure" | |
[s] | |
(read s false nil)) | |
(defn get-response | |
"Get a response from the given string" | |
[s] | |
(with-open [r (PushbackReader. (StringReader. s))] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defstruct virtualmachine :mem :counter :inport :outport :status :firstrun :user) | |
(defn increment-counter | |
[vm] | |
(assoc vm :counter (inc (:counter vm)))) | |
(defn memory-put | |
"Update the memory specified by the key with the address to the given value" | |
[vm key addr val] | |
(assoc vm key (assoc (key vm) addr val))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn run-machine | |
"Run the virtual machine with the decoded instructions." | |
[vm ops update-input] | |
(reduce | |
(fn [v [op args]] | |
(increment-counter (op v args))) | |
(update-input vm) | |
ops)) |
OlderNewer