Functional programming 我如何在方案中为以下内容使用删除?

Functional programming 我如何在方案中为以下内容使用删除?,functional-programming,scheme,Functional Programming,Scheme,我在scheme中得到了两个列表,并检查我们是否可以从另一个元素中形成其中一个。换句话说,我检查这是否是一个错误。为此,我实现了一个名为member?的函数,它接受一个符号和一个列表,如果这个符号在列表中,那么这个函数将从列表中删除该符号并返回新列表。函数的输入输出示例如下所示: 我正在考虑做以下工作:因为我们有两个列表要检查,所以我取第一个列表,对于该列表中的每个符号,使用member?函数,我检查该符号是否出现在其他列表中。最后,如果它是一个空列表,那么我们有一个空列表。以下是一些这样做的试

我在scheme中得到了两个列表,并检查我们是否可以从另一个元素中形成其中一个。换句话说,我检查这是否是一个错误。为此,我实现了一个名为member?的函数,它接受一个符号和一个列表,如果这个符号在列表中,那么这个函数将从列表中删除该符号并返回新列表。函数的输入输出示例如下所示:

我正在考虑做以下工作:因为我们有两个列表要检查,所以我取第一个列表,对于该列表中的每个符号,使用member?函数,我检查该符号是否出现在其他列表中。最后,如果它是一个空列表,那么我们有一个空列表。以下是一些这样做的试验:

(define member?
 (lambda (inSym inSeq)
(if (and (symbol? inSym) (sequence? inSeq)) ; can remove?       
   (remove-member inSym inSeq)             ; then remove!       
   'can-not-remove))) ; otherwise, present an error message

(define 
 (lambda (inSeq1 inSeq2)
    (if (and (sequence? inSeq1) (sequence? inSeq2)) ;if both are sequences
        (if(equal? '() (member? (car inSeq1) inSeq2))) ... ???
 )
)
我无法组织此处所需的递归。有人能帮我吗


谢谢。

仅供记录:检查两个序列是否为字谜的最简单方法是对它们进行排序,看看它们是否相等:

(define canFind?
  (lambda (item sequence)
    (if (null? sequence)
      #f
      (if (equal? item (car sequence))
        #t
        (canFind? item (cdr sequence))
      )
    )
  )
)

(define remove
  (lambda (item sequence)
    (if (equal? item (car sequence))
      (cdr sequence)
      (append (list (car sequence)) (remove item (cdr sequence)))
    )
  )
)

(define isAnagram?
  (lambda (seq1 seq2)
    (if (and (null? seq1) (null? seq2))
      #t
      (if (or (null? seq1) (null? seq2))
        #f
        (if (canFind? (car seq1) seq2)
          (isAnagram? (cdr seq1) (remove (car seq1) seq2))
          #f
        )
      )
    )
  )
)
(define symbol<?
  (lambda (s1 s2) ; compare two symbols
    (string<? (symbol->string s1)
              (symbol->string s2))))

(define anagram?
  (lambda (inSeq1 inSeq2)
    (and (sequence? inSeq1) ; a sequence is a list of symbols
         (sequence? inSeq2) ; a sequence is a list of symbols
         (equal? (sort inSeq1 symbol<?) (sort inSeq2 symbol<?)))))

(define symbol使用排序效率不高,对于您的实现,您不需要member?函数:

(define remove-member
(lambda (n lst)
(cond ((null? lst)
       '())
      ((equal? (car lst) n)
       (cdr lst))
      (else
       (cons (car lst)
             (remove-member n (cdr lst)))))))



(define anagram?
(lambda (lst1 lst2)
(cond ((and (null? lst1) (null? lst2))
       #t)
((or (null? lst1) (null? lst2))
       #f)
      (else
       (anagram? (cdr lst1) (remove-member (car lst1) lst2))
))))