ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# marques-work's solution

## to Anagram in the LFE Track

Published at Jun 02 2020 · 0 comments
Instructions
Test suite
Solution

Given a word and a list of possible anagrams, select the correct sublist.

Given "listen" and a list of candidates like "enlists" "google" "inlets" "banana" the program should return a list containing "inlets".

For installation and learning resources, refer to the exercism help page.

To run the provided tests, you will need make. Open a terminal window and run the following from the exercise directory:

make test

You should now be able to see the results of the test suite for the exercise.

## Source

Inspired by the Extreme Startup game https://github.com/rchatley/extreme_startup

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### anagram-tests.lfe

(defmodule anagram-tests
(behaviour ltest-unit)
(export all))

(include-lib "ltest/include/ltest-macros.lfe")

(deftest no-matches
(is-equal () (anagram:find "diaper" '("hello" "world" "zombies" "pants"))))

(deftest detect-simple-anagram
(is-equal '("tan") (anagram:find "ant" '("tan" "stand" "at"))))

(deftest does-not-confuse-different-duplicates
(is-equal () (anagram:find "galea" '("eagle"))))

(deftest eliminate-angram-subsets
(is-equal () (anagram:find "good" '("dog" "goody"))))

(deftest detect-anagram
(is-equal
'("inlets")
(anagram:find "listen" '("enlists" "google" "inlets" "banana"))))

(deftest multiple-anagrams
(is-equal
'("gallery" "regally" "largely")
(anagram:find
"allergy"
'("gallery" "ballerina" "regally" "clergy" "largely" "leading"))))

(deftest case-insensitive-subject
(is-equal
'("carthorse")

(deftest case-insensitive-candidate
(is-equal
'("Carthorse")

(deftest does-not-detect-a-word-as-its-own-anagram
(is-equal
'("cron")
(anagram:find "corn" '("corn" "dark" "Corn" "rank" "CORN" "cron" "park"))))
(defmodule anagram
(export (find 2)))

(defun find (subj candidates)
"finds candidates that are anagrams of the subject"
(let* ((lowered (string:lowercase subj))
(hashed (lists:sort lowered)))
(lists:filter
(lambda (word)
(and
(!= lowered (string:lowercase word))
(== hashed (lists:sort (string:lowercase word)))))
candidates))
)