1

テキストファイルに保存されているタプルのリストがあります。

[(1,"123","Shiva","address #1",77000),(2,"123","Sina","address #2", 1900)]

それぞれの最初の要素はであり、それぞれtupleacount_Id2番目の要素はtuplepasswordあり、アプリケーションでは、ファイルからリストを読み取り、ユーザーにアカウント番号とパスワードを要求して、ファイルでそれを探す傾向があります。私はこれを試しました:

x <- readFile "database.txt" 
y <- tuples x 
let account  = [(a,b)|(a,b,c,d,e) <- y, ac_no ==a , pass == b]

tuples文字列を受け取り、IO [(AccNo、Pass、Name、Address、Balance)]データ型の出力を提供する関数です。

リスト処理の代わりに高階関数を使用してこのプロセスを改善するにはどうすればよいですか?

前もって感謝します!

4

1 に答える 1

4

lookup型シグネチャを持つ関数があります:

lookup :: Eq a => a -> [(a, b)] -> Maybe b

ただし、これはペアに対してのみ定義されます。

1 つのオプションは、型を使用して特殊化して、この配置を取得することです。

data UserDetails = UserDetails {
  password :: String
  address  :: String
}

リストを(String,UserDetails)ペアとして定義すると、関数を使用できるようになりlookupます。とにかく、データを(単に多くの文字列ではなく)型に入れることは、一般的には本当に良いことなので、これは良いことだと思います。

高階関数を使用したい場合は、 を参照してくださいfind。これは、パターンに一致するリストの最初のものを返します。

何かのようなもの

type UserDataAssociation = (String,String,String,String,String)

findMatchingAssociations :: [UserDataAssociation] -> String -> Maybe UserDataAssociation
findMatchingAssociations xs password = find (\(pw,a) -> pw == password) xs
于 2013-01-24T12:49:00.583 に答える