添加到列表和递增 - Haskell

use*_*712 2 haskell

import Data.Char

-- Sample test data
testData :: [Movies]
testData = [("Me and My Broken Heart","Rixton"),
            ("It’s My Birthday","will.i.am"),
            ("Problem","Ariana Grande")]

-- record a sale of a track 
record :: [Movies] -> String -> String 
record t a = []
record ((t, a): xs) a a
    | t == a && a == a = [(t,a)]
    | otherwise = record xs a t
Run Code Online (Sandbox Code Playgroud)

正确的输出应该是数据库的修改版本.

phi*_*ler 6

首先,因为看起来你正在学习,关于风格的一些注意事项:在这种情况下,以单数形式命名一个销售是一种惯例,并且它们的列表带有复数,即:

type Sale = (String, String, Int)
type Sales = [Sale]
Run Code Online (Sandbox Code Playgroud)

更好的是,人们常常(取决于预期的用途和品味)变成新类型Sale或完整的ADT,因为这样可以提供更多的抽象和类型安全性.

其次,对于您的实际问题:您所看到的行为来自模式匹配的顺序.在你的第一场比赛中,

recordSale testData aTitle anArtist = []
Run Code Online (Sandbox Code Playgroud)

testDate在第二个模式可以应用之前匹配任何列表,也可以是非空列表.改为

recordSale [] _ _ = []
Run Code Online (Sandbox Code Playgroud)

而且你不会再得到空名单了.另外,正如@Aleksandar指出的那样,在列表不为空但过滤条件不匹配的情况下,您不应忘记保留列表的init.