我正在尝试解决初学者的问题,但无法解决问题:
查找功能f
,其中g f [10,8,6,4,2] == [10,8,6,4]
和
g :: (Int -> Int) -> [Int] -> [Int]
g f xs = map f (tail (map f xs))
如何逐步解决它,以发展正确的思维方式?
对于解决方案,我首先想到的是reverse
,但由于map
无法将reverse
应用于列表的每个元素,因此立即将其丢弃,这似乎是胡说八道。接下来,我尝试这样思考:
g f xs = map f (tail (map f xs)) ==
g f xs = map f (tail (map f [10,8,6,4,2])) ==
现在我卡住了,因为我没有立即看到解决方案,该列表中的每个元素要应用什么才能得出在应用tail
时可以给我一些可以再次使用的东西这个未知函数,然后取出输入列表,但最后不带2
。请帮助,我觉得很愚蠢。
答案 0 :(得分:3)
您可以继续自己的计算:
g f xs
= map f (tail (map f [10,8,6,4,2]))
= map f (tail [f 10,f 8,f 6,f 4,f 2])
= map f [f 8,f 6,f 4,f 2]
= [f (f 8),f (f 6),f (f 4),f (f 2)]
您现在可以看到如何找到f
吗
[f (f 8),f (f 6),f (f 4),f (f 2)] = [10,8,6,4]
?