je le code suivant:Autre fonction d'ordre supérieur de python Haskell
import operator
def stagger(l, w):
if len(l)>=w:
return [tuple(l[0:w])]+stagger(l[1:], w)
return []
def pleat(f, l, w=2):
return map(lambda p: f(*p), stagger(l, w))
if __name__=="__main__":
print pleat(operator.add, range(10))
print pleat(lambda x, y, z: x*y/z, range(3, 13), 3)
print pleat(lambda x: "~%s~"%(x), range(10), 1)
print pleat(lambda a, b, x, y: a+b==x+y, [3, 2, 4, 1, 5, 0, 9, 9, 0], 4)
partie importante: Pli prend toute fonction et toute séquence et transmet la première poignée d'éléments de cette séquence dans la fonction reçue en tant que paramètres .
Existe-t-il un moyen de faire ça chez Haskell ou est-ce que je rêve?
Existe-t-il un moyen de l'écrire afin que vous puissiez passer (+) au lieu de (\\ [x, y] -> x + y)? – Squirrelsama
@Legatou: non. Sauf pour l'orthographier différemment: 'lift2 f [x, y] = f x y',' print $ pleat (lift2 (+)) [0..9] 2'. Haskell ne fait pas de fonctions polyvariadiques (les hackers de typeclass vous diront le contraire, mais alors il change en "ne les fait pas bien"). Il y a toujours un moyen de dire clairement ce que vous voulez dire sans eux. – luqui
J'accepte cette réponse comme valide ... bien que déprimante. J'espérais pouvoir évaluer dynamiquement le nombre de paramètres comme j'ai pu le faire ici: http://www.ishpeck.com/4squirrel/pleat.html – Ishpeck