如果给出结果输出,则查找Haskell函数

时间:2018-11-02 23:42:12

标签: haskell

我正在尝试解决初学者的问题,但无法解决问题:

查找功能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。请帮助,我觉得很愚蠢。

1 个答案:

答案 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]