2015-12-15 17 views
6

Aşağıdaki fonksiyonu ben (fun b) çevirmek ve Clojure (partial-right) ya bir yol gibi bir şey yeniden düzenlemek zorunda mıdır sabit aClojure kısmi sağ

(def fun2 (partial fun "1")) 

(fun2 "2") ;; --> "12" 

olabilir (partial) için

(defn fun [a b] (str a b)) 

(fun "1" "2") ;; --> "12" 

Teşekkür sahip Bir fonksiyonun argümanları sabit bir a yerine sabit bir b'a sahip olabilir ve dolayısıyla (fun a) işlevine sahip olabilir mi? Çoklu Arity ile gidebiliriz belirli Örneğin

Teşekkür

+5

. option: '# (fun%" 2 ")' – cfrick

+1

@cfrick Bu, 'fun' impure ise' kısmi '(ya da ilgili yapı) ile eşdeğer olmadığını unutmayın; [bu soruya] bakın (http://stackoverflow.com/questions/20931512/partial-vs-function-literal-when-memoize). –

+0

"Eğlence"? ı, e. FBI mı? – Mars

cevap

0

:

(defn fun 
    ([a b] (str a b)) 
    ([a] (str a "1"))) 
+1

Bu soruya cevap vermiyor, sadece yazarın acil örneğine bir çözüm sunuyor. – acron

2
(defn partial-right [f & args1] 
    (fn [& args2] 
     (apply f (concat args2 args1)))) 

Ama sor kendine ... neden standart kütüphanenin bu zaten parçası değildir? Belki de başka insanlar bu şekilde dolaştılar ve kötü bir şekilde ortaya çıktılar mı? Son zamanlarda irc'de sorulmadığından,

+1

Bilmiyorum. Senin düşüncen nedir? –

+0

@NeilMasson Peki, tam olarak bu pozisyondaydım, bu yüzden bu soruya bir kod cevabım var fakat üst düzey bir Clojurian tarafından sorguya çekildim ve bu tavsiyeyi verdim. Non-deyimsel olarak kabul edilebilir (aksi takdirde stdlib'e bariz bir ekleme olur) – acron