如何在Haskell中实现搜索
我一直在遵循Haskell的一个示例通讯簿程序:如何在Haskell中实现搜索,haskell,search,addressbook,Haskell,Search,Addressbook,我一直在遵循Haskell的一个示例通讯簿程序: menu = "1.Add address\n2.List addresses\n3.Exit" main = do prompt [] data Address=Address String String String deriving Show prompt :: [Address] -> IO() prompt addrs= do putStrLn menu choice <- g
menu = "1.Add address\n2.List addresses\n3.Exit"
main = do
prompt []
data Address=Address String String String
deriving Show
prompt :: [Address] -> IO()
prompt addrs= do
putStrLn menu
choice <- getLine
interpret addrs choice
interpret :: [Address]->String -> IO()
interpret addrs "1" = do
putStr "Names:"
names <- getLine
putStr "Phone:"
phone <- getLine
putStr "Email:"
email <- getLine
putStrLn "Address added"
prompt (addAddr(getAddr names phone email) addrs)
interpret addrs "2" = do
printAddrs addrs
prompt addrs
interpret addrs "3" = putStrLn "Good bye"
interpret _ _ = putStrLn "Don't know what to do with ya!"
getAddr ::String->String->String->Address
getAddr names phone email = Address names phone email
addAddr::Address->[Address]->[Address]
addAddr addr addrs = addr:addrs
printAddrs::[Address]->IO()
printAddrs addrs= putStrLn (fmtAddresses (tail addrs) (head addrs) "")
fmtAddresses::[Address]->Address->String->String
fmtAddresses addrs (Address names phone email) str
| (length addrs==0) = currStr
| (length addrs /=0 ) = fmtAddresses (tail addrs) (head addrs) currStr
where currStr = str++"Names:"++names++"Phone:"++phone++"Email:"++email++"\n"
menu=“1.添加地址\n2.列出地址\n3.退出”
main=do
提示[]
数据地址=地址字符串
衍生节目
提示::[Address]->IO()
提示addrs=do
putStrLn菜单
选择字符串->IO()
解释地址“1”=do
putStr“名称:”
姓名地址
getAddr names电话电子邮件=地址名称电话电子邮件
地址->[地址]->[地址]
addr addr addrs=addr:addrs
printAddrs::[Address]->IO()
printAddrs addrs=putStrLn(fmtaddress(tail addrs)(head addrs)”)
fmtAddresses::[地址]->地址->字符串->字符串
地址(地址名称电话电子邮件)str
|(长度地址==0)=currStr
|(长度地址/=0)=FMTADRESS(尾部地址)(头部地址)currStr
其中currStr=str++“name:+++name++”Phone:+++Phone++”Email:+++Email++“\n”
当前可用的功能只是添加和打印条目。我如何实现此功能的搜索功能?假设我在提示符中输入“name”和“罗纳尔多”,它将只显示名为罗纳尔多的条目
顺便问一下,保存数据(姓名、电话和电子邮件)的代码或容器在哪里,我可以在那里应用过滤器或elem功能
谢谢。
addrs
保存要搜索的地址
interpret addrs "4" = do
putStr "Fulltext search keyword:"
word <- getLine
printAddrs (filter (\(Address name phone email)
-> isInfixOf word name
|| isInfixOf word phone
|| isInfixOf word email
) addrs)
prompt addrs
解释地址“4”=do
putStr“全文搜索关键字:”
单词名称的不确定性
||isInfixOf字电话
||isInfixOf word电子邮件
)地址)
提示地址
谢谢。顺便说一句,我得到了错误地址簿。hs:36:12:error:变量不在范围内:isInfixOf::()->String->BoolGot it。需要导入数据。列表和word