早川です。
-- 1週間悩んでいた問題が一瞬で..

教えて頂いた方法で大満足です!
そうか、関数の型が合わないなら
そのための関数を用意すれば済む話なんですね。

おかげ様で、以下のような multiple 関数を定義できました (^-')b
ありがとうございます。

multiple :: Int -> Int -> Int
multiple x y = (0:multiples x) !! y
    where
    multiples n = multiples_r n 
        where
        multiples_r m = m:multiples_r(m+n)

無限リストから掛け算の結果を求める、という発想を知ったときは
とても驚きました。
やっぱりすごいです、関数プログラミング。

ただ、試しに下の multiple' と一緒に profile 取ってみましたが
とても比較にはなりませんでした (^^;

multiple' :: Int -> Int -> Int
multiple' x y = x * y


On Thu, 03 Apr 2003 11:26:59 -1000 (HST)
Shiro Kawai <shiro / lava.net> wrote:

> これでいいのかな?
> 
> multiples n = multiples_r (n)
>   where multiples_r(m) = m:multiples_r(m+n)
> 
> Hugsで確認
> 
> Main> take 10 (multiples 3)
> [3,6,9,12,15,18,21,24,27,30]
> 
> --shiro

--
SH <hayakawa / edge.co.jp>
Livin' on the EDGE Co., Ltd.


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