List 方案语言:合并两个数字

List 方案语言:合并两个数字,list,merge,numbers,scheme,List,Merge,Numbers,Scheme,如何将列表中的两个整数合并为一个整数?(计划内) 示例: “(11223)->11223假设列表正好有两个元素,并且两个元素都是数字: (define (merge-numbers lst) (let ((1st (number->string (first lst))) (2nd (number->string (second lst)))) (string->number (string-append 1st 2nd)))) 它按预期工作:

如何将列表中的两个整数合并为一个整数?(计划内) 示例:

“(11223)->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
或者,在不使用
的情况下,让

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

这是我12年1月25日3:05的原始答案。它只处理给定的测试。这是一个愚蠢的回答,对不起

(define (merge ls) 11223)    
(merge '(11 223))
这是我的新答案,当传递一个数字列表时,它会处理所有情况。谢谢你的指点! ; 零个或多个字符串的列表->字符串 (定义(合并编号) (如果(空?ns)”“ (let((第一个-n(数字->字符串(车辆编号))) (其余N(cdr N))) (字符串追加first-n(合并数字rest-ns(()())))


由于最初的问题可能意味着结果应该是一个数字,这将导致一个字符串,因此需要使用
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
如果您想要第二个数字的真正原因是什么,那么我认为使用过程
格式
会更具可读性:

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

等等。

硬编码答案如何解决其他情况下的问题?是的,这要好得多,谢谢编辑您的答案:)您可能需要指出,如果需要一个数字而不是一个字符串,那么结果可能必须通过
(字符串->数字)
(原始问题中没有双引号,因此OP很可能想要一个数字结果)。再次感谢您的指针blubberdiblub。在尝试改进我的答案时,我最终得到了Mayer Goldberg的答案!我将添加该注释。
(define merge-two-numbers
  (lambda (s)
    (string->number
      (format "~a~a"
        (car s)
        (cadr s)))))