我正在一个项目上,想要创建一个函数,该函数将采用逻辑形式的列表作为输入,并返回一个由变量名组成的新列表。
例如:
(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)))
答案 0 :(得分:1)
典型的初学者作业是拼合列表。您将在此处找到很多问题,基本上它将使'(A and (not B or C))
成为(A and not B or C)
。那你就快到了。
由于例如,基本上在变量和运算符之间没有区别。 not
可以排在前面,and
可以排在中间。我想您不能使用与运算符相同的变量名,并且需要提前了解这些运算符。然后,您可以过滤平展列表以删除运算符。然后您将剩下(A B C)
。
即使您的问题中甚至没有任何代码,也很难提供具体的帮助,因此这是我能为您提供的帮助。祝你好运。