所以我現在已經完成了我的全部任務,但有一個問題令我困惑(即使我覺得答案很簡單)。計劃輸出格式
問3.5:
寫一個程序,你的結果轉換爲所需的輸出格式。
的期望是輸出和格式如下:
((0) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
((0) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
((1) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)
((1) 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0)
((1) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1)
((0) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1)
其中,所述第一元件是所述進位輸出相加的。如果進位是(1),則表示加法器溢出。列表中的其餘元素是總和。
現在我得到的輸出是這樣的:
(0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
(0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
(1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0)
(1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0)
(1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1)
(0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1)
有誰知道我能正常得到這個格式化?我一直在想,不知道該怎麼做。
編輯 -
這是產生輸出的代碼:
(define binaryadd (lambda(L1 L2)
(let ((len1 (length L1)) (len2 (length L2)))
(if (> len1 len2)
(binaryadd L2 L1)
(if (< len1 len2)
(binaryadd (append '(0) L1) L2)
(recursiveAdd (append '(0) L1) (append '(0) L2) 0)
)) ) ))
(define recursiveAdd (lambda(L1 L2 carry)
(if (null? L1)
'()
(let ((t (+ (tail L1) (tail L2) carry)))
(append (recursiveAdd (rmtail L1)
(rmtail L2)
(quotient t 2))
(list (remainder t 2))
)) ) ) )
(define n-bit-adder (lambda(A B n)
(binaryAdd A B)
))
(define X1 '(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))
(define X2 '(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1))
(define X3 '(0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1))
(define X4 '(1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0))
(define X5 '(0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1))
(define X6 '(1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1))
(n-bit-adder X1 X2 32)
(n-bit-adder X3 X4 32)
(n-bit-adder X5 X6 32)
(n-bit-adder X2 X3 32)
(n-bit-adder X4 X5 32)
(n-bit-adder X1 X6 32)
你在哪裏面臨的煩惱?你只是將列表中的列表轉換爲列表中的每個列表的第一個元素(包含進位),其餘是表示總和的數字列表? – HyperZ
您沒有向我們展示任何代碼,所以我們不知道是否有任何問題。作爲一個快速解決方案,請注意'(list 0 1 1 1)'產生'(0 1 1 1)'和'(list(list 0)1 1 1)'產生'((0)1 1 1)''。 –
另請注意,'(append'(A)B))'相當於'(cons'A B)'。 (我懷疑,如果n-bit-adder的參數是分配的要求,那麼忽略其中的一個參數將被視爲不完美。) – molbdnilo