J'ai besoin de définir une fonction par exemple: p> évalue à p > (répéter-écriture n f) code> de sorte que
((répéter-écriture n f) x) code> évalue à
(f (f (... (f (f x) ...))) code>
où il y a des applications
n code> de la fonction
f code>.
â(5 6)
4 Réponses :
Pour commencer, nous pourrions essayer de définir et aussi p> et p> et p> et p> Ce n'est pas une raquette valide cependant. Pour commencer, nous ne pouvons pas avoir plusieurs définitions à la fois, dans la raquette, même si elles sont mutuellement exclusives. Nous devons l'écrire sous la forme d'un Ceci est une raquette valide maintenant mais bien sûr toujours insatisfaisante. Et si mais attendez, voyez-vous un motif là-bas? Bien sûr, il fait exactement que nous voulions, pour mais c'est aussi pareil que p> n'est-ce pas? Et ce qui est si spécial sur Alors, nous pouvons maintenant simplifier cela un peu plus, en prenant soin que tous les cas em> sont manipulés, Et c'est ça. P> Ce n'est pas queue em> -Recursive, oui, mais c'est récursif, et c'est correct em>, qui est la chose la plus importante. Donc, ça vous obtient commencé. Suivez simplement le même modèle de pensée et écrivez la transformation correspondante de la manière récursive de la queue. En particulier, P> Cond code>, p>
n code> est supérieur à
4 code>? P>
n = 4 code> il appelle la fonction
f code> 4 fois, pour
n = 3 code> il l'appelle 3 fois, c'est-à-dire une fois moins de temps que pour
n = 4 code>. Donc, écrivons-le en bas: p>
4 code> de toute façon, pourquoi devrions-nous être exigeants artificiellement
n code> pour être un numéro spécifique, n'est-ce pas
n code> qui est plus grand que
0 code> manipulé exactement de la même manière? p>
(define ((repeat-compose n f) x)
(cond
((> n 0) ( (repeat-compose (- n 1) f) (____ x) ))
;; -------------------------- ^^^^ fill the blanks
Gotcha .. cela satisfait certainement l'exemple, mais je me demande comment la récursion de la queue peut être utilisée dans cette ..
Eh bien, ce n'est pas récursif de la queue, mais c'est récursif, et c'est correct, ce qui est la chose la plus importante. Donc, ça vous obtient commencé.
Super, merci pour votre aide! Je vais essayer de construire sur ça ..
Je reçois l'erreur ci-dessous lorsque j'essaie d'exécuter le code final, comment puis-je passer cela? `` `Définir: attendu le nom de la fonction, mais a trouvé une partie` `` ``
Pour une nouvelle question avec le nouveau code, veuillez poster la nouvelle question dans un nouveau poste séparé, y compris toutes les informations et les codes pertinents, éventuellement avec un lien vers ce poste pour référence en arrière-plan.
répéter-compose code> sans utiliser composer code> Nous définissons une fonction locale locale reconsive de la queue % répétez-la compose Code> et mettre un lambda code> autour de son appel pour renvoyer une fonction curryfied. p> xxx pré> Essayons: p>
(define (repeat-compose n f)
(lambda (x) ((apply compose (make-list n f)) x)))
((repeat-compose 3 cdr) '(1 2 3 4 5))
;; '(4 5)
Veuillez modifier votre réponse à utiliser code> list code> pour (liste FFFFFF) code> et non
' code> "citation qui tourne chaque
f code> F symbole au lieu d'une fonction
Quelle réponse sauvage et énergique;)
Utiliser en utilisant: p> pour / pli code>
est également une option:
Le [Divulgation: je suis le Auteur de cet utilitaire] em> p> p> la fonction code>
est destiné exactement à ce genre de chose: => '(5 6 ) code> p>
puissance code> fonctionne pour n'importe quel type et composition, non seulement la composition de fonction. p>
Est-ce qu'il utilise l'exponentiation par une quart répétée, pour créer des représentations plus compactes des fonctions construites lorsque n code> est grand?
@Willness ne connaissait pas cette optimisation mais c'est brillant. Cela ne le fait pas actuellement de cette façon, mais je souhaiterais absolument y ajouter cela.
Oui, j'ai juste eu cette pensée pop dans ma tête de retour quand je lisais votre réponse. :)
En fait, c'était dans le contexte de l'écriture cette réponse .
Merci d'avoir partagé :)
Cette réponse ultérieure répond effectivement à la Q.