如何获取Haskell列表中的元素?

Han*_*ans 1 haskell list

我想创建一个函数,String在一个类型列表中查找[(String, Int)]并返回Int与之配对的函数String.

像这样:

?> assignmentVariable "x" [("x", 3), ("y", 4), ("z", 1)]
3
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

assignmentVariable :: String -> [(String, Int)] -> Int
assignmentVariable [] = error "list is empty"
assignmentVariable n (x:xs) = if x == n
                              then xs
                              else assignmentVariable
Run Code Online (Sandbox Code Playgroud)

我怎么写这个?

chi*_*chi 7

我们来看看发布的代码:

assignmentVariable::String -> [(String, Integer)] -> Integer
assignmentVariable [] = error "list is empty"
assignmentVariable n (x:xs) = if x == n then xs else ...
Run Code Online (Sandbox Code Playgroud)

第一个方程只有一个参数,而第二个方程有两个.我们来解决这个问题.

assignmentVariable::String -> [(String, Integer)] -> Integer
assignmentVariable _ []     = error "list is empty"
assignmentVariable n (x:xs) = if x == n then xs else ...
Run Code Online (Sandbox Code Playgroud)

既然我们这样做x == n,这些变量必须是同一类型.然而,n::Stringx::(String,Integer).我们需要x在比较之前拆分成组件.

assignmentVariable::String -> [(String, Integer)] -> Integer
assignmentVariable _ []         = error "list is empty"
assignmentVariable n ((m,x):xs) = if m == n then xs else ...
Run Code Online (Sandbox Code Playgroud)

结果xs是一个列表,而不是Integer类型签名所暗示的.你只想要x那里.

assignmentVariable::String -> [(String, Integer)] -> Integer
assignmentVariable _ []         = error "list is empty"
assignmentVariable n ((m,x):xs) = if m == n then x else ...
Run Code Online (Sandbox Code Playgroud)

最后,递归调用.什么时候m/=n,我们想尝试列表中的其他对xs,所以:

assignmentVariable::String -> [(String, Integer)] -> Integer
assignmentVariable _ []         = error "list is empty"
assignmentVariable n ((m,x):xs) = if m == n 
                                  then x
                                  else assignmentVariable n xs
Run Code Online (Sandbox Code Playgroud)