2015-03-30 56 views
-1

我試圖寫一個字符串從輸入和發現列表中的該字符串,並返回在列表中,如果位置的功能找到了。我不知道如何去做這件事。有任何想法嗎?想寫一個字符串從輸入的功能,並找到該字符串列表中的

+1

你能否至少寫一些僞代碼來演示你想要做什麼?它甚至不必是Haskell-ish僞代碼,只是爲了清楚地顯示你正在嘗試做什麼。你的問題並沒有提供你所知道的Haskell解決手頭問題的方法,而你迄今爲止還沒有提到你嘗試過的任何方法。 – bheklilr 2015-03-30 21:09:16

+3

你想要的功能似乎是[elemIndex](http://haddocks.fpcomplete.com/fp/7.8/20140916-162/base/Data-List.html#v:elemIndex)。 – user2407038 2015-03-30 21:12:16

+0

或者http://hackage.haskell.org/package/bytestring-0.10.6.0/docs/Data-ByteString.html#v:find – GeneralBecos 2015-03-30 21:20:28

回答

2

我沒有完全理解你的問題,但可能是你需要的是這樣的:

find_str :: [String] -> String -> Integer 
find_str list str = help_func list str 0 

help_func [] str idx = -1 
help_func (h:t) str idx | h == str = idx 
         | otherwise = help_func t str (idx + 1) 

該函數返回該字符串的索引列表,或-1,如果沒有找到

例如:

find_str ["abc", "bcs", "qwe"] "bcs" 

返回1

find_str ["abc", "bcs", "qwe"] "abcs" 

返回-1

+0

這正是我所需要的。謝謝 – ghostofrasputin 2015-03-31 01:08:10

+0

有很多更一般和更優化的方法。查看OP的問題的評論。 – utdemir 2015-06-02 07:15:41

1

如果字符串不在列表中,該怎麼辦?我們應該適當地處理這種情況。所以這個函數只有可能返回列表中字符串的索引。在此基礎上的描述,這個功能的簽名是:

strPos :: String -> [String] -> Maybe Int 

此功能strPos將主要檢查在列表中的第一參數平等的每個項目,同時增加了指數的當前值。你可以用一個輔助函數來完成這個操作,該輔助函數也需要一個整數作爲參數,並將0傳遞給它。如果該物品未找到,該怎麼辦?如果清單是空的呢?提示:這兩種情況可以用相同的方式處理。

+0

當然你可以通過Maybe類型,如果需要的話 – Mikhail 2015-03-30 21:21:02

+1

返回一個錯誤代碼讓我覺得笨重。通過這種方式,失敗的可能性被嵌入到類型簽名中,並且我認爲該功能更易於使用。 – zcleghern 2015-03-30 21:23:59

+1

我用if語句來檢查函數是否返回大於0的值。對於我的程序來說,錯誤代碼真的很有用 – ghostofrasputin 2015-04-01 05:59:01

相關問題