代码之家  ›  专栏  ›  技术社区  ›  beoliver

为什么clojure返回1N而不是1?

  •  2
  • beoliver  · 技术社区  · 14 年前
    ;; ------------------------- DICE COEFFS ------------------------
    
    (defn dice-set-coeff [a b]
      (* (/ (count (clojure.set/intersection a b))
            (+ (count a) (count b)))
         2))
    
    (defn dice-lst-coeff [a b]
      (dice-set-coeff (set a) (set b)))
    
    ;; ------------------------- BIGRAMS ----------------------------
    
    (defn now-nxt [xs]
      "im sure there is a better way to write this"
      (map #(list %1 %2) xs (rest xs)))
    
    (defn bigram [xs]
      (list now-nxt xs))
    
    (defn dice-string-bigram [a b]
      (dice-lst-coeff (bigram a) (bigram b)))
    

    为什么我在结果中得到1N?

    tst.core> (dice-string-bigram "hello" "hello")
    1N
    tst.core> (dice-string-bigram "hello" "helap")
    1/2
    tst.core> (dice-string-bigram "hello" "howdy")
    0
    tst.core> (== (dice-string-bigram "hello" "hello") 1)
    true
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   Arthur Ulfeldt    14 年前

    1N是读取器和REPL用于BigInts的语法。

    其中一个调用是返回一个bigint。


    re:“我相信有更好的方法来写这个”
    user> (now-nxt a)
    ((\h \e) (\e \l) (\l \l) (\l \o))
    user> (partition 2 1 a)
    ((\h \e) (\e \l) (\l \l) (\l \o))