如何在20%的时间Clojure中用字符串替换整数

时间:2017-01-05 00:42:51

标签: clojure integer lisp

我需要在clojure中用一个字符串替换一个整数,但只有20%的输出整数。

(defn factor5 [x]
  (if (= (mod x 3) (mod x 5) 0) "BuzzFizz"
  (if (= (mod x 5) 0) "buzz"
  (if (= (mod x 3) 0) "fizz" x))))

这里我有一个fizzbuzz程序,如果数字是3的倍数则输出“fizz”,如果是5的倍数则打印“buzz”,如果是两者的倍数则打印“BuzzFizz”。如果一个整数都不是上述倍数,则整数被打印出来。我需要的是打印“Boom”而不是整数,但只有20%的整数。

一些伪代码

 if(x == int){
   print out Boom instead of x only for 20% }
   else{
   print out x}

由于我的伪代码是基于java的

,因此我在clojure中的表达非常有限

3 个答案:

答案 0 :(得分:0)

请参阅the Clojure Cheatsheet以获取全面的功能列表。

您想要的是rand,以及类似的测试:

(if (< (rand) 0.2) ....)

答案 1 :(得分:0)

如果你想随机做出决定,你可以在if语句中使用其中一个rand runctions:

UPDATE_USERNAME

还有user> (defn x20% [x] (if (rand-nth [true false false false false]) "Boom" x)) #'user/x20% user> (x20% 5) 5 user> (x20% 5) 5 user> (x20% 5) "Boom" user> (x20% 5) 5 rand。你使用的有点风格和功能的细节:

rand-int

答案 2 :(得分:0)

(defn factor-5 [x]
  (if (and (number? x) (zero? (rem x 1)))
    (if (zero? (rand-int 5))
      "Boom"
      x)))
  • 返回所需的值而不是打印它。
  • 它测试它的参数是数字,如果是 - 它是一个 整数值,可以是byteshortint,....
  • (rand-int 5)0, 1, ... 4随机选择。