簡體   English   中英

基於加法函數的兩個一元列表的乘法

[英]Multiplication of two unary lists based on the addition function

(define unary-add
  (lambda (list1 list2)
    (if (pair? list1)
        (cons (car list1)
              (unary-add (cdr list1) list2))
        list2)))

我執行了清單的兩個一元表示的加法運算。 現在,我想將它們相乘,將乘法視為重復的加法。 因此,我利用了此功能,並進行了以下操作:

(define unary-mul
  (lambda (list1 list2)
    (if (pair? list1)
        (cons (car list1)
              (unary-mul (unary-add (cdr list1) list2)))
        list2)))

在運行代碼時,它說參數不匹配。 我哪里出問題了?

您當前的方法似乎不正確-遞歸調用被放錯了位置,並且報告的錯誤表明您忘記了將第二個參數傳遞給unary-mul 嘗試以下方法:

(define unary-mul
  (lambda (list1 list2)
    (if (pair? list2)
        (unary-add list1
                   (unary-mul list1 (cdr list2)))
        '())))

說明:乘法只是重復的加法,在上面的代碼中,我們繼續添加list1並減小list2的長度,直到它為空。 它按預期工作:

(unary-mul '(x x x) '(x x))
=> '(x x x x x x)

暫無
暫無

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

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