2016-10-03 2 views
0

私は、このようなconditonと混同Haskellでは再帰関数を学んでいる:ハスケル:特定の条件でタプルのリストで文字を返す再帰関数(比較)

私はここにタプルのリストを得た:

[(0.5,'!'),(1,'*'),(1.5,'#')] 
私がやりたいことは数入力され

nは、リスト

の各タプルに拳の数と比較するので、それは0.5とそれが0.5よりも小さい見つけるを比較すると、それがcharを返します、nは仮定= 0.1 '!' > 0.5と比較しておくです

仮定するN = 0.7、「*」は< 1、それがchar返すこと

を見つけて、リスト全体を比較し、Dを見つけた後、最後のよりもまだ大きいです1、それだけで「n」の文字を返します

私は時間のような条件の多くと仕事してきたが、それでもこれに取得することはできません、ここに私のコードです:

find :: Double -> [(Double,Char)] -> Char 
find d [] = ' ' 
find d xs 
    | d <= Double(xs[0]) = xs[0] 
    | d > Double(xs[0]) = find d tail(xs) 

再帰を使用してください!

+0

の配列と異なっています。 – immibis

+0

@immibis私は最初のタプルがないリストを返すはずだと思っています。タプルのリストではうまくいかないということですか?そして、このコードには何がありますか? – o1xhack

+1

私が間違っていないと、 'tail(xs)'は 'tail(xs)'と同じなので、 'find d tail(xs)'は 'find d tail xs'と同じです。 3つの引数 "を見つける。 – immibis

答えて

3

tupleは、私は `テール(XS)は`あなたはそれがない何を考えていないと思いますHaskellの

find :: Double -> [(Double,Char)] -> Char 
find d [] = ' ' 
find d (x:xs) 
    | d <= fst x = snd x 
    | otherwise = find d xs 
+0

私はこれを試して、それでも "パターンの解析エラー:" – o1xhack

+0

私はちょうど '()'を見逃してしまいました。 – Kamel

+0

それはうまくいきます、リスト+タプルの例をもっと与えるウェブサイトのようなリソースがありますか? – o1xhack

関連する問題