2017-03-25 36 views
1

Javascriptの "indexOf"に相当する関数を書こうとしています(文字列内の文字のインデックスを取得しています)が、再帰関数を呼び出すときに問題があります。より多くのパラメータを持つ再帰

これはエラーです:

Couldn't match expected type `Int' 
      with actual type `a0 -> [a0] -> Int' 
In the return type of a call of `get_index' 
Probable cause: `get_index' is applied to too few arguments 
In the expression: get_index (index + 1 char str) 
In an equation for `get_index': 
    get_index index char str 
     | index < 0 || index >= (length str) = - 1 
     | (str !! index) == char = index 
     | otherwise = get_index (index + 1 char str) 
Failed, modules loaded: none. 

これは私のコードです:

index_of char str = 
    get_index 0 char str 

get_index index char str 
    | index < 0 || index >= (length str) = -1 
    | (str !! index) == char = index 
    | otherwise = get_index(index + 1 char str) 

まず関数の目的は、インデックスパラメータ、より多くの何も再帰を呼び出すためだけで、私が持っている問題があります2番目の関数では、再帰。

+3

あなたの間違いは 'get_index'の再帰呼び出しにあります。 'get_index'の最後の行では、' get_index(index + 1)char str'、 'get_index(index + 1 char str)'を意味していました。そして、機能は期待通りに機能します! – Alec

+0

はい、うまくいきました。あなたより! – Marcus

答えて

2

Cスタイルの関数呼び出し構文を使用しようとしているようです。 Cスタイルの関数の場合は です。

// defining the function 
int plus(int a, int b) 
{ 
    return a + b; 
} 

// elsewhere, calling the function 
plus(a, b); // brackets surrounding only the arguments, comma separated 

同等のHaskellコードは

-- defining the function 
plus :: Int -> Int -> Int 
plus a b = a + b 

-- elsewhere, calling the function: 
(plus a b) -- brackets surrounding the function and the arguments, no commas 
-- note, plus (a b) would be equivalent to c: plus(a(b)); 

注意されます、これらのブラケットは、しか曖昧さ回避のために必要とされ、この場合には、それらはplus a bを残して除去することができます。
は、以下の場合には、彼らが必要とされるであろう:

plus(a, times(b, c)); 

は、これは次のようになります。それは同じではありませんが

plus a (times b c) 

:同じです

(plus a (times b c)) 

plus a times b c 
+1

'plus a b 'が別の関数呼び出しの引数でない限り、外側の括弧は必要ではなく省略する必要があります(これはLispではありません)。 – leftaroundabout

+0

これらは必要ではないことを言及しますが、この関数が別の関数呼び出しに組み込まれている場合は、曖昧さ回避のために必要ですが、cの関数呼び出しでは*追加のかっこは必要ありません。例えば ​​'f x(y))' => '(f x(g y))' == 'f x(g y)'ではなく 'f x g y' –

関連する問題