0

別のリストで特定の値が出現するインデックスのリストを返す方法を見つけようとしています。つまり、index(1, [1,2,1,1,2,2,1]); val it = [1,3,4,7] int リスト

リストがどのように機能するかを理解しようとしていて、再帰を改善しようとしているので、List.nth (またはライブラリ関数) を使用したくありません。パターン マッチングの静かな状態にはまだ移行したくありません。

これは私がこれまでに持っているものです

fun index(x, L) =
if null L then 0
else if x=hd(L) then 
    1
else 
    1 + index(x,tl L);

fun inde(x, L) =
if null L then []
else if x=hd(L) then 
    index(x, tl L) :: inde(x, tl L)
else
    inde(x, tl L);

index(4, [4,2,1,3,1,1]);

inde(1,[1,2,1,1,2,2,1]);

これにより、[2, 1, 3, 0] のような結果が得られます。インデックスを取得するために物事を適切にインクリメントするのに苦労しているだけだと思います。ただし、インデックス関数自体は正しく機能します。

4

2 に答える 2

0

index(1,[2]) を実行すると、1 が返されますが、これは正しくありません。リストが空の場合、ゼロになります。このような関数では、おそらく SOME/NONE 機能を使用したいと思うでしょう。

于 2013-10-06T23:17:53.563 に答える