簡體   English   中英

方案語言:合並兩個數字

[英]Scheme language: merge two numbers

如何將列表中的兩個整數合並為一個? (在Scheme中)示例:
'(11 223) - > 11223

假設列表中只有兩個元素,並且兩個元素都是數字:

(define (merge-numbers lst)
  (let ((1st (number->string (first  lst)))
        (2nd (number->string (second lst))))
    (string->number (string-append 1st 2nd))))

它按預期工作:

(merge-numbers '(11 223))
> 11223

或者,不使用let

(define (merge-numbers lst)
  (string->number
   (string-append
    (number->string (first  lst))
    (number->string (second lst)))))

這是我在12月25日3:05的原始答案。 它只處理給定的測試。 抱歉,這是一個無意識的回答。

(define (merge ls) 11223)    
(merge '(11 223))

這是我的新答案,它在傳遞數字列表時處理所有情況。 謝謝你blubberdiblub的指針! ; 零個或多個字符串的列表 - > string(define(merge-numbers ns)(if(null?ns)“”(let((first-n(number-> string(car ns)))(rest-ns(cdr) ns)))(string-append first-n(merge-numbers rest-ns)))))

(merge-numbers '(11 223))
(merge-numbers '())
(merge-numbers '(1))
(merge-numbers '(1 2))
(merge-numbers '(1 2 3))
(merge-numbers '(1 2 3 4))
(merge-numbers '(1 2 3 4 5))

"11223"
""
"1"
"12"
"123"
"1234"
"12345"

由於原始問題可能意味着結果應該是一個數字,並且這會產生一個字符串,因此需要使用string- string->number來獲得最終答案。 再次感謝blubberdiblub解釋海報可能意味着什么,我錯過了它。

編寫此過程有很多方法,具體取決於您的計划。 例如,如果列表可能包含兩個以上的數字(將來?),那么您可以按如下方式編寫它:

(define merge-numbers
  (lambda (s)
    (string->number
      (apply string-append
        (map number->string s)))))

所以你現在可以輸入:

> (merge-numbers '(4 9 66 33 555 1))
4966335551

如果你想要第二個的真正原因,那么我認為使用過程format會更具可讀性:

(define merge-two-numbers
  (lambda (s)
    (string->number
      (format "~a~a"
        (car s)
        (cadr s)))))

等等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM