| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

A Haskell interface to the Online Encyclopedia of Integer
Sequences (OEIS), http://www.research.att.com/~njas/sequences/.
Comments, suggestions, or bug reports should be sent to
Brent Yorgey, byorgey at gmail dot com.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Synopsis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Example usage | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Suppose we are interested in answering the question, "how many distinct binary trees are there with exactly 20 nodes?" Some naive code to answer this question might be as follows: import Data.List (genericLength) -- data-less binary trees. data BTree = Empty | Fork BTree BTree deriving Show -- A list of all the binary trees with exactly n nodes. listTrees :: Int -> [BTree] listTrees 0 = [Empty] listTrees n = [Fork left right | k <- [0..n-1], left <- listTrees k, right <- listTrees (n-1-k) ] countTrees :: Int -> Integer countTrees = genericLength . listTrees The problem, of course, is that *Main> :set +s *Main> countTrees 5 42 (0.00 secs, 0 bytes) *Main> countTrees 10 16796 (0.47 secs, 27513240 bytes) *Main> countTrees 12 208012 (7.32 secs, 357487720 bytes) *Main> countTrees 13 *** Exception: stack overflow There's really no way we can evaluate import Math.OEIS -- countTrees works ok up to 10 nodes. smallTreeCounts = map countTrees [0..10] -- now, extend the sequence via the OEIS! treeCounts = extendSequence smallTreeCounts Now we can answer the question: *Main> treeCounts !! 20 6564120420 Sweet. Of course, to have any sort of confidence in our answer, more research is required! Let's see what combinatorial goodness we have stumbled across. *Main> description `fmap` lookupSequence smallTreeCounts Just "Catalan numbers: C(n) = binomial(2n,n)/(n+1) = (2n)!/(n!(n+1)!). Also called Segner numbers." Catalan numbers, interesting. And a nice formula we could use to code
up a *Main> (head . references) `fmap` lookupSequence smallTreeCounts Just ["A. Bernini, F. Disanto, R. Pinzani and S. Rinaldi, Permutations defining convex permutominoes, preprint, 2007."] *Main> (head . links) `fmap` lookupSequence smallTreeCounts Just ["N. J. A. Sloane, <a href=\"http://www.research.att.com/~njas/sequences/b000108.txt\">The first 200 Catalan numbers</a>"] And so on. Reams of collected mathematical knowledge at your fingertips! You must promise only to use this power for Good. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Lookup functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Look up a sequence in the OEIS by its catalog number. Generally
this would be its A-number, but M-numbers (from the /Encyclopedia of
Integer Sequences Note that the result is not in the Examples: Prelude Math.OEIS> getSequenceByID "A000040" -- the prime numbers Just [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47... Prelude Math.OEIS> getSequenceByID "A-1" -- no such sequence! Nothing | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Look up a sequence by ID number, returning a data structure containing the entirety of the information the OEIS has on the sequence. The standard disclaimer about not being in the Examples: Prelude Math.OEIS> description `fmap` lookupSequenceByID "A000040" Just "The prime numbers." Prelude Math.OEIS> keywords `fmap` lookupSequenceByID "A000105" Just [Nonn,Hard,Nice,Core] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Extend a sequence by using it as a lookup to the OEIS, taking the first sequence returned as a result, and using it to augment the original sequence. Note that The result is not in the Examples: Prelude Math.OEIS> extendSequence [5,7,11,13,17] [5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71... Prelude Math.OEIS> extendSequence [2,4,8,16,32] [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192... Prelude Math.OEIS> extendSequence [9,8,7,41,562] -- nothing matches [9,8,7,41,562] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Find a matching sequence in the OEIS database, returning a data structure containing the entirety of the information the OEIS has on the sequence. The standard disclaimer about not being in the | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The same as getSequenceByID, but with a result in the IO
monad.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The same as lookupSequenceByID, but in the IO monad.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The same as extendSequence, but in the IO monad.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The same as lookupSequence, but in the IO monad.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Data structures | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Produced by Haddock version 2.3.0 |