gpt4 book ai didi

loops - 在 Haskell 中循环遍历 map 数据结构

转载 作者:行者123 更新时间:2023-12-01 06:57:46 24 4
gpt4 key购买 nike

我有一个具有以下结构的 map 数据结构:-
“英国的首都是什么”->“伦敦”
“法国的首都是什么”->“巴黎”
我想遍历显示问题的 map :“英国的首都是什么”,要求用户输入。如果用户回答“伦敦”,我打印正确,否则,我打印正确答案“伦敦”。这在像 C# 这样的命令式语言中很容易,但我还没有想出如何在 Haskell 中做到这一点。

最佳答案

使用问题 Map以这种方式对Map进行了大量的遍历。 values 假设您不关心键而只关心包含的值。里面有遍历Data.Map就足够了,@danidiaz 已经指出,但调用 toList 是完全合理的。因为该列表将被懒惰地生成,而不是一次强制进入内存。给定一个元组列表(键,值),您可以使用 for 遍历它或 mapMfmap或 .... 基本上任何你喜欢的结构,只要你能使用 IO monad。

{-# LANGUAGE OverloadedLists #-}
import Data.Foldable (for_)
import Data.Map (Map,toList)

m :: Map String String
m = [("a","1"),("b","2")]

main =
for_ (toList m) $ \(q,a) ->
do putStrLn q
x <- getLine
putStrLn (if x == a
then "Yes"
else "No: " ++ a)

编辑:我觉得有必要使用 mapM_ 添加大多数人称之为更惯用的 Haskell 的内容。 :
main :: IO ()
main = mapM_ ask (toList m)

ask :: (String,String) -> IO ()
ask (q,a) = do putStrLn q
x <- getLine
putStrLn (if x == a then "Yes" else "No: " ++ a)

关于loops - 在 Haskell 中循环遍历 map 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42565394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com