2011-01-28 4 views
1

tmux에서 실행중인 clojure repl에 여러 함수 정의를 붙여 넣는 데 문제가 있습니다. (일반적인 경우는 많은 양의 코드에 붙여 넣기합니다.)많은 양의 텍스트를 tmux에서 실행중인 clojure repl에 붙여 넣으면 오류가 발생하고 텍스트가 뒤섞입니다.

tmux에서 실행되지 않는 clojure repl에 수동으로 다음 clojure 정의를 하나의 붙여 넣기 작업으로 붙여 넣으면 잘 넘깁니다.

그러나 tslime에서 붙여 넣거나 clojure repl을 실행하는 tmux에 직접 붙여 넣을 때 최종 def 중 일부는 텍스트가 깨져서 일부 정의 만 제대로 완료됩니다. (make-exponentiation def 주위에 망가져 간다.)

다른 누구나이 경험이 있었거나 무슨 일이 벌어 졌는지에 대해 알고 싶습니까?

 

; Some expiriments and exercises for 
; Lecture 3B of SICP 


(ns deriv) 

(defn variable? 
    [x] 
    (symbol? x)) 

(defn same-variable? 
    [v1 v2] 
    (and (variable? v1) (variable? v2) (= v1 v2))) 

(defn sum? 
    [x] 
    (and (seq? x) (= (first x) '+))) 

(defn make-sum 
    [a1 a2] 
    (cond 
    (= a1 0) a2 
    (= a2 0) a1 
    (and (number? a1) (number? a2)) (+ a1 a2) 
    :else (list '+ a1 a2))) 

(defn make-product 
    [a1 a2] 
    (cond 
    (or (= a1 0) (= a2 0)) 0 
    (= a1 1) a2 
    (= a2 1) a1 
    (and (number? a1) (number? a2)) (* a1 a2) 
    :else (list '* a1 a2))) 

(defn product? 
    [x] 
    (and (seq? x) (= (first x) '*))) 

(defn addend 
    [[op addend & augend]] 
    addend) 

(defn augend 
    [[op addend & augend]] 
    (if (next augend) 
    (conj augend '+) 
    (first augend))) 

(defn multiplier 
    [[op multiplier & multiplicand]] 
    multiplier) 

(defn multiplicand 
    [[op multiplier & multiplicand]] 
    (if (next multiplicand) 
    (conj multiplicand '*) 
    (first multiplicand))) 


(defn exponentiation? 
    [x] 
    (and (seq? x) (= (first x) '**))) 

(defn base 
    [[op base exponent]] 
    base) 

(defn exponent 
    [[op base exponent]] 
    exponent) 

(defn make-exponentiation 
    [base exponent] 
    (cond 
    (= exponent 0) 1 
    (= exponent 1) base 
    :else (list '** base exponent))) 



(defn deriv 
    [exp var] 
    (cond 
    (number? exp) 0 
    (variable? exp) (if 
         (same-variable? exp var) 
         1 
         0) 
    (sum? exp) (make-sum 
       (deriv (addend exp) var) 
       (deriv (augend exp) var)) 
    (product? exp) (make-sum 
        (make-product (multiplier exp) 
            (deriv (multiplicand exp) var)) 
        (make-product (multiplicand exp) 
            (deriv (multiplier exp) var))) 
    (exponentiation? exp) (make-product 
          (deriv (base exp) var) 
          (make-product 
           (exponent exp) 
           (make-exponentiation 
           (base exp) 
           (- (exponent exp) 1)))) 
    :else 
     (throw (Exception. (str "unknown expression type -- DERIV " exp))))) 

 
+0

문제의 범위를 좁혔습니다. 나는 tmux에서 rlwrap로 clojure repl을 실행 중입니다. tmux에서 rlwrap을 사용하지 않고 clojure repl을 실행할 때 제대로 작동하는 것 같습니다. 그래서 문제가 내 rlwrap 구성에 있어야한다고 생각하고 있습니다. – harishtella

답변

1

저는 거의 매일 tmux를 사용합니다. 나는 보통 emacs + swank/slime을 사용하고 문제가 없다. JLine도이 문제를 피하는 것 같습니다. 대신 rlwrap 시도하고 비슷한 동작을 발견했습니다. 이것은 가장 확실한 rlwrap 문제로 보인다. REPL을 그대로 사용하고 싶다면 JLine을 사용해 보는 것이 좋습니다. 단지 항아리를 다운로드하여 경로에 넣거나 Leiningen 종속성으로 선언해야합니다. 다음과 같이 JLine 지원을 사용하여 REPL을 시작할 수 있습니다.

java -cp "lib/*:lib/dev/*" jline.ConsoleRunner clojure.main 

그런 다음에 잘 진행해야합니다.