2014-03-18 27 views
0

我得到了什麼是哈斯克爾獲取從第一個數字字符串位置

digitIndex :: String -> Int 
digitIndex [] = 1 
digitIndex (x:xs) = 
    if 
     isDigit x == True 
    then 
     -- Count list 
    else 
     -- Create list with x(x is not a digit) 

什麼我的想法是,當他經過一個數字,他只需要算給列表的所有,他是通過這樣的X該列表將成爲數字的位置(當您計算+1時)。

唯一的問題是我不知道如何讓工作更完成。你們能幫我解決問題嗎?

+2

請不要惡意破壞自己的帖子。如果有必要刪除它們,請舉報主持人,並要求刪除。 –

回答

0

只是正常的遞歸:

digitIndex :: String -> Int 
digitIndex [] = 0 
digitIndex (x:xs) = if isDigit x 
        then 1 
        else 1 + digitIndex xs 

如果第一個字符本身就是一個數字,那麼函數返回1否則它只是增加了1並將剩餘的字符串(xs)的功能和遞歸去上。

另請注意,當String根本沒有數字時,上述功能無法正常工作。

而且還檢查isDigit == True是沒有必要的。

+0

這不會使好輸出,因爲如果我填寫:digitIndex「hel3lo」它會輸出1而不是4(3是在字符串的第四位) – user3434886

+0

@ user3434886我錯誤地理解你的問題,已更新解決方案。 – Sibi

+0

也許我需要在我的解釋中更清楚,但你解決了我的問題。謝謝! – user3434886

3

您可以使用findIndex

import Data.List 

digitIndex :: String -> Int 
digitIndex = maybe 0 id . findIndex isDigit