Как я могу получить и вернуть переменные из списка? - PullRequest
1 голос
/ 16 марта 2019

Я работаю над проектом и хочу создать функцию, которая будет принимать логическое предложение в виде списка в качестве входных данных и возвращать новый список, состоящий из имен переменных.

Например: (A and (not B or C)) вернется (A B C)

Но мне трудно зацикливаться на списке ввода, особенно когда речь идет о вложенных списках, как в примере.

edit: Спасибо, получил код, который работает:

(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 Ответ

1 голос
/ 16 марта 2019

Типичным заданием для новичка является выравнивание списка. Здесь вы найдете много вопросов об этом, и в основном это превратит '(A and (not B or C)) в (A and not B or C). Тогда ты почти у цели.

В принципе, нет никакой разницы между переменной и оператором, так как, например. not может прийти раньше, а and может оказаться между. Я думаю, вы не можете иметь имена переменных, которые совпадают с вашими операторами, и вам нужно знать операторы заранее. Затем вы можете отфильтровать плоский список, чтобы удалить операторов. тогда вы останетесь с (A B C).

Трудно помочь со спецификой, когда у вас даже нет кода в вашем вопросе, так что это насколько я могу вам помочь. Удачи.

...