99 questions/46 to 50
From HaskellWiki
RossPaterson (Talk  contribs) 
RossPaterson (Talk  contribs) 

Line 5:  Line 5:  
If you want to work on one of these, put your name in the block so we know someone's working on it. Then, change n in your block to the appropriate problem number, and fill in the <Problem description>,<example in lisp>,<example in Haskell>,<solution in haskell> and <description of implementation> fields. 
If you want to work on one of these, put your name in the block so we know someone's working on it. Then, change n in your block to the appropriate problem number, and fill in the <Problem description>,<example in lisp>,<example in Haskell>,<solution in haskell> and <description of implementation> fields. 

−  +  == Logic and Codes == 

−  == Problem 41 == 

−  
−  <Problem description> 

−  
−  <pre> 

−  Example: 

−  <example in lisp> 

−  
−  Example in Haskell: 

−  <example in Haskell> 

−  </pre> 

−  
−  Solution: 

−  <haskell> 

−  <solution in haskell> 

−  </haskell> 

−  
−  <description of implementation> 

== Problem 46 == 
== Problem 46 == 
Revision as of 01:21, 13 December 2006
These are Haskell translations of Ninety Nine Lisp Problems.
If you want to work on one of these, put your name in the block so we know someone's working on it. Then, change n in your block to the appropriate problem number, and fill in the <Problem description>,<example in lisp>,<example in Haskell>,<solution in haskell> and <description of implementation> fields.
1 Logic and Codes
2 Problem 46
<Problem description>
Example: <example in lisp> Example in Haskell: <example in Haskell>
Solution:
<solution in haskell>
<description of implementation>
3 Problem 47
<Problem description>
Example: <example in lisp> Example in Haskell: <example in Haskell>
Solution:
<solution in haskell>
<description of implementation>
4 Problem 48
<Problem description>
Example: <example in lisp> Example in Haskell: <example in Haskell>
Solution:
<solution in haskell>
<description of implementation>
5 Problem 49
An nbit Gray code is a sequence of nbit strings constructed according to certain rules. For example,
n = 1: C(1) = ['0','1']. n = 2: C(2) = ['00','01','11','10']. n = 3: C(3) = ['000','001','011','010',´110´,´111´,´101´,´100´].
Find out the construction rules and write a predicate with the following specification:
% gray(N,C) : C is the Nbit Gray code
Can you apply the method of "result caching" in order to make the predicate more efficient, when it is to be used repeatedly?
Example in Haskell: P49> gray 3 ["000","001","011","010","110","111","101","100"]
Solution:
gray :: Int > [String] gray 1 = ["0", "1"] gray (n+1) = let xs = gray n in map ('0':) xs ++ map ('1':) (reverse xs)
It seems that the gray code can be recursively defined in the way that for determining the gray code of n we take the gray code of n1, prepend a 0 to each word, take the gray code for n1 again, reverse it and perpend a 1 to each word. At last we have to append these two lists. (Wikipedia seems to approve this.)
Instead of the equation forgray 0 = [""]
what leads to the same results.
6 Problem 50
<Problem description>
Example: <example in lisp> Example in Haskell: <example in Haskell>
Solution:
<solution in haskell>
<description of implementation>