【发布时间】:2019-05-10 01:00:13
【问题描述】:
我有以下功能:
blockToPicture :: Int -> [Picture] -> Picture
blockToPicture n [pic1,pic2,pic3] | n==0 = ...
| n==1 = ...
| otherwise = ...
如果n==0 我想选择pic1,如果n==1 我想选择pic2。否则我想选择pic3。问题是当其中一张图片没有加载时,它不会出现在列表中。
而不是[pic1,pic2,pic3] 我有类似[Pic1,Pic3] 的东西。
当函数是supposed 来选择不在列表中的图片时,我希望它改为写"X"。为此,我将使用该功能
text "X" 代替。问题是我不知道如何让它写"X"而不是选择错误的图片。
编辑: 我创建了以下函数,但由于某种原因,我在图片中收到错误“变量不在范围内”。
blocoParaPicture :: Int -> [Picture] -> Picture
blocoParaPicture b l | b==0 = if elem pic1 l then pic1 else text "X"
| b==1 = if elem pic2 l then pic2 else text "X"
| otherwise = if elem pic3 l then pic3 else text "X"
【问题讨论】:
-
好吧,您可以再次对
[pic1, pic2]、[pic1]和[]等列表进行模式匹配,并且每次都替换不再涵盖的案例。但我建议您实现一种递归模式,在递减索引和列表尾部进行递归。 -
不不不,你应该使用
[Maybe Picture]类型的列表。 -
文本“X”函数有什么作用?可以使用 (Either String Picture) 代替。
标签: haskell gloss juicy-pixels