こんにちは。早川です。
-- curry については、ありがとうございました。
-- 見た目はホント Haskell そっくりな言語なんですね〜

差分リストについはコメントできないのですが (^^;
まずは自分も1つ tailn 関数を考えてみました。

tailn n xs | length xs <= n = xs
           | otherwise      = tailn n (tail xs)

これで動いてるようですが、効率の方は分かりません..

ずばり "最後のn個の要素" のような型は定義できないのですかね。


On Wed, 19 Mar 2003 20:36:04 +0900
TOYOFUKU Chikanobu <ttoyofukujp / yahoo.co.jp> wrote:
>    豊福です。
> 
>    リストの最後のn個の要素を返す関数 tailn を素直に書けば
>    tailn n = reverse.(take n).reverse
> だと思うのですがこれは遅延評価であっても一度全リストをため
> こんでしまうんですよね。ためこまない tailn を次のように
> 書いてみたのですが
> 
>    _tailn :: Int -> [a] -> [a] -> [a]
>    _tailn n hs [] = hs
>    _tailn 0 (_:hs) (_:ts) = _tailn 0 hs ts
>    _tailn n hs (t:ts) = _tailn (n-1) hs ts
> 
>    tailn :: Int -> [a] -> [a]
>    tailn n xs = _tailn n xs xs
> 
> 問題ないでしょうか。差分リストのつもりで書いたのですが
> 「haskell 差分リスト」で検索してもどこのページも引っ掛から
> ないので不安です。
>    もしかして reverse と take を少し変更すれば素直っぽく
> それでいてためこまないように書けるのでしょうか。

--
SH
tetryl / tokyoprogrammer.com


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/