Racket code only please Using the logical operators, and, or, implies, not, and iff, and atoms representing truth values, we can make a list that would represent proposition: For instance: '(A and (not A)), or '((B iff (A or C)) implies (not (C implies A))) would represent the formal statements (A∧¬A) and ((B ≡(A∨C)→¬(C → A))). We use the following convention when we represent propositions in this way: for every operator – unary or binary – there corresponds at least one pair of parentheses defining its scope (and perhaps more). Thus, the lists ‘(A and not A) and (B iff A or C) are not permitted but ‘((A and ((not A))) and ‘(B iff (((A or C)))) are acceptable. 1. Define collect-prop-variables, which will take as input a list representing a proposition, and return a list, representing a set, of all the variables used in the expression. Example: (collect-prop-variables '(A and (not A))) should return '(A) and (collect-prop-variables '((B iff (A or C)) implies (not (C implies A))) ) should return '(A B C). Test cases: (collect-prop-variables2 '(A and (not A))) ; should return '(A) (collect-prop-variables2 '((B iff (A or C)) implies (not (C implies A))) ) ; should return '(A B C) (collect-prop-variables '(((A iff B)) or (((not D) and A)))) ; should return '(B A D) No loops or hash please Allowed functions. Your code must use only the following functions: 1. define, let 2. lambda 3. cons, car, cdr, list, list?, append, empty?, length, equal? 4. and, or, not 5. if, cond 6. map, append-map, andmap, ormap, filter, begin 7. +, -, /, * Thank you!!!
Racket code only please
Using the logical operators, and, or, implies, not, and iff, and atoms representing truth values,
we can make a list that would represent proposition: For instance: '(A and (not A)), or '((B iff (A or C)) implies (not (C implies A))) would represent the formal statements (A∧¬A) and ((B ≡(A∨C)→¬(C → A))).
We use the following convention when we represent propositions in this way: for every operator
– unary or binary – there corresponds at least one pair of parentheses defining its scope (and
perhaps more). Thus, the lists ‘(A and not A) and (B iff A or C) are not permitted but ‘((A and
((not A))) and ‘(B iff (((A or C)))) are acceptable.
1. Define collect-prop-variables, which will take as input a list representing a proposition, and return a list, representing a set, of all the variables used in the expression. Example: (collect-prop-variables '(A and (not A))) should return '(A) and (collect-prop-variables '((B iff (A or C)) implies (not (C implies A))) ) should return '(A B C).
Test cases:
(collect-prop-variables2 '(A and (not A))) ; should return '(A)
(collect-prop-variables2 '((B iff (A or C)) implies (not (C implies A))) ) ; should return '(A B C)
(collect-prop-variables '(((A iff B)) or (((not D) and A)))) ; should return '(B A D)
No loops or hash please
Allowed functions. Your code must use only the following functions:
1. define, let
2. lambda
3. cons, car, cdr, list, list?, append, empty?, length, equal?
4. and, or, not
5. if, cond
6. map, append-map, andmap, ormap, filter, begin
7. +, -, /, *
Thank you!!!
Step by step
Solved in 5 steps
The functions do not return what they should