вставка большого количества текста в репозиторий clojure, запущенный в tmux, приводит к ошибкам и перепутыванию текста - PullRequest
1 голос
/ 28 января 2011

У меня возникают проблемы при вставке нескольких определений функций в репозиторий clojure, запущенный в tmux. (общий случай - вставка большого количества кода)

Когда я вручную вставляю следующие определения clojure (как одну операцию вставки) в repl clojure, не запущенный в tmux, он вставляется поверх штрафа.

Но при вставке из tslime или непосредственно в tmux при запуске repl clojure некоторые из окончательных определений искажают свой текст, и только некоторые определения завершаются правильно. (облажается вокруг определения возведения в степень)

Кто-нибудь еще испытывает это или есть идеи о том, что может происходить?


; 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)))))


1 Ответ

1 голос
/ 12 апреля 2011

Я использую tmux почти ежедневно. Я обычно использую emacs + swank / slime и у меня нет проблем. JLine, кажется, также избегает этой проблемы. Вместо этого я попробовал rlwrap и заметил похожее поведение. Это, безусловно, кажется проблемой rlwrap. Если вы хотите сохранить тот же REPL, который вы используете, я предлагаю попробовать JLine. Вам просто нужно скачать jar и поместить его в свой путь или объявить его как зависимость Leiningen. Затем вы можете запустить REPL с поддержкой JLine следующим образом:

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

После этого тебе надо идти.

...