【发布时间】:2014-04-22 12:52:32
【问题描述】:
我定义了一个函数f,它返回一个项目x的price,该项目存储在一个类型为[(String,String,Int)]的价格列表中
a = String
x = String
price = Int
pricesList = [(a,x,price)]
f a x ((a1, x1, price):ys) | a == a1 && x == x1 = price
| otherwise = f a x ys
我必须将此功能应用于项目列表,但我被卡住了。这可以使用地图吗?我想不通。
(唯一可以使用递归的函数是f)
编辑。一些例子来澄清一下
pricesList = [("apple","ipod",100),("apple","iphone",200),("samsung","galaxy",200)]
moneySpent = [("harry",1985,"apple",["iphone","ipod"]),("george",1983,"samsung",["galaxy"])]
*Main> f "apple" "iphone" pricesList
200
我需要知道一个人通过定义一个新函数花了多少钱,比如说spentBy(并在其中使用f)
*Main> spentBy "harry"
300
到目前为止我做了什么:
itsThePerson name (n,_,_,_) = name == n
infoFrom name = (head . filter (itsThePerson name)) moneySpent
brand (_,_,b,_) = b
product (_,_,_,p) = p
brandPerson = brand . infoFrom
productPerson = product . infoFrom
是否可以使用map 和f 函数来知道一个人购买的产品的价格总和?
(函数f 将是函数itemPrice)
spentBy name = sum (map (itemPrice (brandPerson name) xxx pricesList) (productPerson name)
我的想法是否正确?
【问题讨论】:
-
完全不清楚您要做什么。如果您有作业,请尝试逐字引用。如果您正在尝试执行一些现实世界的任务,请描述该任务。
-
如果我理解您要执行的操作,
f是一个查找商品价格的函数,list是您要查找的商品列表价格。对吗? -
@mhwombat 是的,这是正确的。我需要将函数
f应用于项目列表,而不仅仅是一项。使用地图可以吗? -
以后,与其改写您的问题,不如在底部添加任何说明。
-
map接受一个列表和一个转换函数,并返回一个按元素转换的列表。你有什么样的清单?你想得到什么样的清单?
标签: haskell functional-programming