2015-02-09 32 views
0

我試圖解決以下問題:方案 - 如何將數據結構應用於2個羅馬數字對象(字母和數值)的組合以生成2個字符的羅馬數字?

寫稱爲form-rn功能,消耗2個Roman-Numeral對象(digit1digit2),併產生由digit1digit2從讀出的值表示的兩個字符Roman-Numeral左到右。字符串值digit1digit2必須是單個字母(I,V,X,L,C,D或M之一)。

例如:

(form-rn (make-Roman-numeral "C" 100) (make-Roman-numeral "C" 100)) 

產生(make-Roman-numeral "CC" 200),和

(form-rn (make-Roman-numeral "X" 10) (make-Roman-numeral "L" 50)) 

產生(make-Roman-numeral "XL" 40)

到目前爲止,我試了幾件事情:

(define II (make-Roman-numeral "II" 2)) 
(define IV (make-Roman-numeral "IV" 4)) 

這是在試圖產生羅馬數字的組合,但我意識到,這可能不是我應該採取的辦法。

(make-Roman-numeral 'I 1) 
(make-Roman-numeral 'V 5) 

我想也許如果我不得不分別定義每個羅馬數字,但它不應該像一個單個字符「I」它應該像「IV」

(define (form-rn digit1 digit2) 
    (cond 
    [(> digit1 digit2) (+ (Roman-numeral-value digit1) (Roman-numeral-value digit2))])) 

我一個組合考慮制定條件,因爲問題說如果第一個符號大於另一個,那麼這兩個符號相加,但如果第二個符號大於第一個符號,則較大符號的值減去較小符號的值。

+0

嗨!歡迎來到Stack Overflow。它看起來像你試圖獲得幫助與家庭作業問題或類似的練習。這是允許的,但是SO不是代碼寫入服務,所以爲了獲得幫助,你應該展示一個嘗試解決這個問題的方法。發佈您迄今爲止所嘗試的內容,並且[關注如何提出問題的信息,請參閱幫助中心](http://stackoverflow.com/help/how-to-ask)。 – 2015-02-09 06:28:05

+0

「羅馬數字」結構的字段名稱是什麼?我看到第二個字段是「價值」,但第一個字段的名稱是什麼? – 2015-02-09 06:40:23

+0

第一個字段是'letters' – 2015-02-09 06:42:38

回答

0

你絕對是在正確的軌道上與你最後一次嘗試!有兩點要注意

  1. 的問題是問你從form-rn函數返回一個Roman-numeral對象,所以你需要調用make-Roman-numeral從裏面。
  2. 您需要處理其中digit1大於digit2和相反的情況。

爲了將這些字母加在一起,我們可以使用string-append。要找到新的value,那麼我們可以使用cond來檢查哪個數字更大。然後,我們只需要計算我們計算出的兩個新值,並將它們合併到一個新的Roman-numeral對象中。

你可以做到這一點,像這樣:

(define (form-rn digit1 digit2) 
    (define new-letters (string-append (Roman-numeral-letters digit1) (Roman-numeral-letters digit2))) 
    (define new-values 
    (let ([value1 (Roman-numeral-value digit1)] 
      [value2 (Roman-numeral-value digit2)]) 
     (cond 
     [(> value1 value2) 
     (+ value1 value2)] 
     [else 
     (- value2 value1)]))) 
    (make-Roman-numeral new-letters new-values)) 
+0

我是否需要爲所考慮符號的每個組合(I,V,X,L,C,D,M)創建不同的構造函數? – 2015-02-09 06:48:49

+0

@ShagunChhikara不會,這將處理所有這些。我會把它作爲一個練習來找出原因。 ;) – 2015-02-09 06:49:30

+0

好的。另外,我不需要定義每個符號及其值嗎?如果是這樣,「(定義C 100)」就足夠了嗎? – 2015-02-09 06:52:32