1

私の最初の関数型プログラミングのクラスでは、与えられたリストの真ん中の 3 分の 1 を返すプログラムを書こうとしています。私の知る限り、これを行う最も簡単な方法は、リストの最初の 3 分の 2 を取得し、不要な最初の 3 分の 1 を削除して、中央の 3 分の 1 のみを返すことです。ただし、構文を正しく理解できないようです。

middlethird :: [a] -> [a]
middlethird l
    |len `mod` 3 /= 0 = []
    |otherwise        = drop (1 `div`take ((2 `div` 3) len) l drop ((1 `div` 3)*len) l
    where len = length l

現在、「where」で解析エラーが発生していますが、これは理解できません...しかし、その前でさえ、入力したすべてのリストに対して空のセットを取得していました.リストの長さは 3 で割り切れません。

私はかなり混乱しています...どんな助けや指針も大歓迎です。前述したように、これは宿題の一部ですが、これは最後の部分であり、他のすべては問題なく実行されているようです. 未経験ですみません!

編集:気にしないで、私はそれを理解しました。

middlethird :: [a] -> [a]
middlethird l
    |mod len 3 /= 0 = []
    |otherwise =  drop (div len 3) (take (2*(div len 3)) l)
    where len = length l
4

2 に答える 2