Je veux pouvoir faire le pseudocode suivant:
idéalement, je voudrais que la signature ressemble à: p> mais je ne suis pas sûr que j'approche cela correctement ... je J'ai essayé de changer la fonction sur p> et cet exemple plus compliqué: p> mais cela fait un + sur ' A et 'B Avant de marcher dans le coureur. P> Voici mon premier coup de clojure: P> (defn runner [a b c] (
(for [i (range 10)
j (range 10)] (println i j (c i j))
4 Réponses :
Je ferais sa signature être quelque chose comme p>
Exemple: p>
(coureur Alen Blen op) code> p>
(coureur 10 10 +) code> p>
mais si je veux faire: (coureur A B (+ (- A B) (- B a))
Le concept qui vous manque est qu'une opération complexe ou une simple opération est toutes deux des opérations seulement - vous nourrissez [1-10] [1-10] dans une fonction - que ce soit simple ou complexe n'a pas d'importance aussi longtemps que Il faut deux arguments.
Lol et je ne peux pas m'empêcher de remarquer ... (+ (- A b) (- B a) (- B a)) code> toujours à 0 :) Mais je comprends ce que vous dites.
Ok, mais cela ne tient pas compte (Baker capable de coureur (Charlie Cable Baker)) Renvoyer la même sortie que (Barre FOO de Runner Foo (barrlie Foo Bar) et (Baz Foo Bar (Baz Foo Bar)) renvoyant une sortie différente
Je ne suis pas vraiment sûr que je réponde à la bonne question. Je pense "si je passe une fonction un symbole au lieu d'une valeur Comment peut-il utiliser la valeur que le symbole représente? Est-ce que ferme?
(def a 4) (defn my-inc [x] (+ (eval x) 1)) user> (my-inc 'a) 5
Il n'est pas assez clair pour moi ce que vous essayez d'atteindre, mais ce qui suit est une réponse à ce que je suppose que c'est votre question: Notez que le style ci-dessus est probablement pas ce que vous devriez faire. Demandez une meilleure question et nous vous donnerons de meilleures réponses. P> p>
Les arguments de la fonction sont toujours évalués avant que la fonction ne soit appelée. Si vous souhaitez différer l'évaluation ou représenter un certain calcul ou un code comme objet, vous avez quelques options:
EVAL CODE> IT. LI>
ol> Utiliser une fonction est ce que vous voulez faire 99% du temps. 1% du temps, vous voulez des macros. Vous n'auriez jamais besoin de eval code> sauf si vous ne générez pas de code à l'exécution ou de faire des objets très vissés. P> xxx pré> ceci pourrait également être écrit comme (Runner # (+% 1% 2) code> ou même simplement (Runner +) code>. p> Il n'est pas nécessaire de passer " A code > "et" b code> "dans la fonction comme arguments. doseq code> et pour code> introduisez leurs propres noms locaux et lexiquement scopés pour des choses. Il n'y a aucune raison ils doivent utiliser A code> et b code>; tout nom va faire. C'est la même chose pour fn code>. J'ai utilisé x code> et y code> ici parce que cela n'a pas d'importance. p> J'aurais pu utiliser a code> et B code> dans le fn code> le corps aussi, mais ils auraient été un différent em> A code> et B code> que ceux du doseq code> voit. Vous voudrez peut-être lire sur Portée si cela ne " t faire sens. p> p>
Ce n'est pas la réponse que je cherchais, mais je posais la mauvaise question. Merci d'avoir fourni une voie à l'illumination.