2017-10-10 1 views
0

Existe-t-il un moyen d'utiliser les opérandes * et + avec des chaînes dans Clojure?Utilisation de plus et d'opérandes avec des chaînes Clojure

Par exemple:

(defn times [a b] (* a b)) 

=> (times x y) 
Desired Output: x*y 

OU

Desired Output: xy 
+0

Pourquoi est '(defn * [ab] (str ab)) 'ne fonctionne pas? – qxg

+0

L'erreur que je reçois dit essentiellement qu'un var ne peut pas être converti en un nombre –

+0

D'autres langues définissent ce comportement comme '3 * 'AB' => 'ABABAB'', mais multiplier deux chaînes est quelque chose que vous devez trouver. . Je serais content que Clojure ne trouve rien. Définissez simplement cette fonctionnalité vous-même. Aussi 'str' fait ce que vous attendez de' + '(je suppose) – cfrick

Répondre

0

Je suppose que vous utilisez Clojure sur la machine virtuelle Java. La fonction * fonctionne uniquement avec des nombres. Vous pouvez convertir une chaîne en un nombre en analysant au bon type:

(def int1 (Integer/parseInt "1")) 
(def double1 (Double/parseDouble "1.0")) 
(def product1 (* int1 double1)) ;; 2.0 
;; or 
(def int2 (clojure.edn/read-string "1")) 
(def double2 (clojure.edn/read-string "1.0")) 
(def product2 (* int2 double2)) ;; 2.0 
+0

Merci beaucoup. –

0

Je ne vois pas de problème:

(defn * [a b] 
    (if (and (string? a) (string? b)) 
    (str a b) 
    (clojure.core/* a b))) 

WARNING: * already refers to: #'clojure.core/* in namespace: user, being replaced by: #'user/* 
=> #'user/* 
(* 4 5) 
=> 20 
(* "A" "B") 
=> "AB" 
+0

Merci beaucoup. –

+0

Pas de problème. S'il vous plaît, votez pour la réponse si vous l'aimez et cliquez sur la coche si elle répond à votre question. – tarmes