0

clojure で文字列を作成するのに問題があります。文字列変数の 1 つである book の長さに応じて、一連の空白を挿入する必要があります。

(defn blanks [book]
    (let [ x(count book)]
    (cond 
            (= "4" x) "    "
            (= "5" x) "     "
            (= "6" x ) "      "
)))

(defn Key1 [x date book bookid]
    (cond 
            (= "AB.LN.TUV" x) (str date".                  AB.LN.  TUV. JKL.      FOO.           FOO.   GRAVITY.       "book".book."(str (blanks book)) bookid)
            (= "DEF.NY.ZXY" x) (str date". DEF.NY. ZXY. JKL.     .          .QPR.             "book".  POS.        "book"."bookid)
            (= "DEF.LN.TUV" x ) (str date".                DEF.LN.  TUV. JKL.      FOO.           FOO.   GRAVITY.       "book".book."blanks bookid)
))



(defn ShowSelectedParams [& props] 
    (let [
              entity "AB.LN.TUV"


              book "ABCD"
              date "21030823"
              bookid "1234abcd"
              ]

              (Key1 entity date book bookid)
))

ただし、これはスペースなしで次を返します。

" 21030823.AB.LN.TUV.JKL.FOO.FOO.GRAVITY.ABCD.book.1234abcd "

私が取得したいものは次のとおりです。

「21030823.AB.LN.TUV.JKL.FOO.FOO.GRAVITY.ABCD.*ストロングテキスト*book.1234abcd」

これについての助けは大歓迎です

4

1 に答える 1

1

これは、もう少し慣用的なものにするための試みです

より標準的な clojure スタイルを書式設定に適用し、文字列をハードコーディングするのではなく、カウントに基づいて空白の数を生成し、繰り返される等価チェックを case ステートメントに置き換えました。

(defn blanks
  [book]
  (apply str (repeat (count book) \space)))


(defn Key1
  [x date book bookid]
  (case x
    "AB.LN.TUV" (str date
                     ".AB.LN.TUV.JKL.FOO.FOO.GRAVITY."
                     book ".book."
                     (blanks book)
                     bookid)
    "DEF.NY.ZXY" (str date
                      ".DEF.NY.ZXY.JKL...QPR."
                      book
                      ".POS."
                      book
                      "."
                      bookid)
    "DEF.LN.TUV" (str date
                      ".DEF.LN.TUV.JKL.FOO.FOO.GRAVITY."
                      book
                      ".book."
                      blanks
                      bookid)))

(defn ShowSelectedParams
  [& props] 
  (let [entity "AB.LN.TUV"
        book "ABCD"
        date "21030823"
        bookid "1234abcd"]
    (Key1 entity date book bookid)))
于 2013-08-23T14:32:58.690 に答える