EXERCISE: Temperature conversion with cond

Write a function which converts temperatures into degrees Celsius.

The function should take degrees and scale as arguments, where scale is either fahrenheit or kelvin temperature scales. If the celsius scale is used, then return the same value For example:

(temperature-in-celsius 32.0 :fahrenheit)    ;=> 0.0
(temperature-in-celsius 300  :kelvin)        ;=> 26.85
(temperature-in-celsius 22.5 :celsius)       ;=> 22.5
(temperature-in-celsius 22.5 :fake)          ;=> "Unknown scale: :fake"

If an unknown temperature scale is used, an error message should be returned

(defn temperature-in-celsius [temperature scale]
  (cond
    ;; ...
    ))
;;
;; Dont forget to call your function
()

Formulas to convert temperatures

  • Fahrenheit to Celsius: (* (- Fahrenheit 32) 5/9) = Celsius
  • Kelvin to Celsius: (- Kelvin 273.15) = Celsius
Reveal answer...

Our function takes two arguments, the temperature in degrees celsius

(defn temperature-in-celsius [temperature scale]
  (cond
    (= scale :celsius)    temperature
    (= scale :fahrenheit) (* (- temperature 32) 5/9)
    (= scale :kelvin)     (- temperature 273.15)
    :else                 (str "Unknown scale: " scale)))

(temperature-in-celsius 32.0 :fahrenheit)    ;=> 0.0
(temperature-in-celsius 300 :kelvin)         ;=> 26.85
(temperature-in-celsius 22.5 :celsius)       ;=> 22.5
(temperature-in-celsius 22.5 :gibberish)     ;=> "Unknown scale: :gibberish"

results matching ""

    No results matching ""