gpt4 book ai didi

haskell - 应用于参数的函数列表

转载 作者:行者123 更新时间:2023-12-05 00:14:19 25 4
gpt4 key购买 nike

任务是创建函数,获取一元函数列表(+1,*2 等) (至少 3 个)并始终如一地将它们应用到论证中。例如:func 1 [(+1),(+1),(/2)] == 1.5。这是我做的:

compose x [(y),(c),(z)] =  map ($ x) [(z) . (c) . (y)]

但是如何制作无限的功能列表?如果用户需要 3 个以上的功能。
另一个问题是这个函数返回一个元素而不是一个元素的列表([4] 而不是 4),我有点坚持

最佳答案

这应该可以解决问题:

compose x ys = foldl (\a b -> b a) x ys

这可以 ETA 减少为
compose = foldl (\a b -> b a)

或者
compose x [] = x
compose x (y:ys) = compose (y x) ys

它将函数应用于输入,然后将该输入用作下一个输入,直到它到达列表的末尾,然后返回最终值。
λ> compose 1 [(+1), (+1), (/2)]
1.5
λ> compose 1 [(+1), (+1), (/2), (*10), (+(-1))]
14.0
λ> compose 1 []
1
λ>

由于haskell 解析负数的方式,我认为您必须通过添加负数来创建负数函数。

如果用户必须输入至少 3 个函数,您可以这样做:
compose x ys
| length ys < 3 = error "Must enter at least 3 functions!"
| otherwise = foldl (\a b -> b a) x ys

或者,您可以返回一个Maybe,因为在可恢复的东西上出错不是很好的风格。
compose x ys
| length ys < 3 = Nothing
| otherwise = Just $ foldl (\a b -> b a) x ys

关于haskell - 应用于参数的函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com