1

我无法将多个函数定义粘贴到在 tmux 中运行的 clojure repl 中。(一般情况是粘贴大量代码)

当我手动将以下 clojure 定义(作为一次粘贴操作)粘贴到未在 tmux 中运行的 clojure repl 中时,它粘贴得很好。

但是当从 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)))))


4

1 回答 1

1

我几乎每天都使用 tmux。我通常使用 emacs + swank/slime 并且没有问题。JLine 似乎也避免了这个问题。我改为尝试 rlwrap 并注意到类似的行为。这似乎是一个 rlwrap 问题。如果你想保持你正在使用的相同 REPL,我建议尝试一下 JLine。您只需要下载 jar 并将其放在您的路径中或将其声明为 Leiningen 依赖项。然后,您可以使用 JLine 支持启动 REPL,如下所示:

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

在那之后你应该很高兴。

于 2011-04-12T12:37:05.920 回答