haskell,如何使用元组创建小型数据库

|| 这是我的问题,我需要使用2元组(即成对)列表来构建一个数据库,该数据库代表有关一个国家拥有县所属城市的信息。 例如,c1拥有c2,而c2拥有c3,而c3拥有c4,但是没有直接说明c1对c4的“间接”所有权(等)。 我需要编写一个函数'owns \',给定两个字符串,country将返回一个布尔值,指示第一个字符串是否拥有第二个布尔值(即使是间接的,如上述c1和c4的情况)。 这是我的代码,我知道这不太对劲,我对Haskell来说是个新手,所以需要帮助。
lst = [(\"uk\",\"scotland\"),(\"scotland\",\"aberdeen\"),(\"china\",\"hongkong\"),(\"hongkong\",\"kulong\")]
owns :: String-> String -> Bool
owns a b 
    | n = lookup a (fromList lst)
        |if b==n 
            return true
        |otherwise m = lookup n (fromlist lst)
            if b==m
            return true
    | otherwise = False
我期望输出结果应该是这样的:
Main> owns \"uk\" \"scotland\"
True
Main> owns \"uk\" \"aberdeen\"
True
Main> owns \"uk\" \"hongkong\"
False
    
已邀请:
owns parent child = parent == child || any (owns parent) [p | (p, c) <- lst, c == child]
您将想知道它是如何工作的。 首先,我们认识到这是一个递归问题。 c1拥有c2拥有c3拥有c4等。我们不知道这可以采取多少步骤。因此,我们需要一个基本案例和一个递归案例。 基本情况是
parent == child
。如果这是对的,那么总体答案是对的。 现在,递归的情况。
any
接受一个函数和一个列表,如果列表的任何成员使该函数返回True,则返回True。 (我现在需要睡觉,如有需要,稍后会再说。)     

要回复问题请先登录注册