[英]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.