如何从列表中提取和返回变量?

时间:2019-03-16 00:58:59

标签: scheme racket

我正在一个项目上,想要创建一个函数,该函数将采用逻辑形式的列表作为输入,并返回一个由变量名组成的新列表。

例如: (A and (not B or C))将返回(A B C)

但是我很难遍历输入列表,尤其是当它涉及嵌套列表时(如示例中那样)。

编辑:谢谢,得到了一些有效的代码:

(define (flatten list)
  (cond ((null? list) '())
    ((pair? (car list))
     (append (flatten (car list))
             (flatten (cdr list))))
    (else (cons (car list) (flatten (cdr list))))))

(define (remove-element list)
  (filter (lambda (x) 
        (and (and (and (not (equal? x 'and)) 
             (not (equal? x 'or)))
             (and (not (equal? x 'implies))
             (not (equal? x 'not)))     )
             (not (equal? x 'iff))))
      (flatten list)))

1 个答案:

答案 0 :(得分:1)

典型的初学者作业是拼合列表。您将在此处找到很多问题,基本上它将使'(A and (not B or C))成为(A and not B or C)。那你就快到了。

由于例如,基本上在变量和运算符之间没有区别。 not可以排在前面,and可以排在中间。我想您不能使用与运算符相同的变量名,并且需要提前了解这些运算符。然后,您可以过滤平展列表以删除运算符。然后您将剩下(A B C)

即使您的问题中甚至没有任何代码,也很难提供具体的帮助,因此这是我能为您提供的帮助。祝你好运。