我不想帮助解决这个问题,但我想确切地知道它的要求。并且为了更好地理解它的要求,我问是否有人可以提供示例输入及其相应的输出。
Write and certify a recursive procedure check which inputs an sexp s
and a list varlst
of identifiers and decides whether s belongs to the class of fully
parenthesized infix +-expressions fpip defined as follows:
var ::= a | b | c | d | e | f | g
fpip ::= var | (fpip + fpip)
有效“fpip”表达式的示例:
a
(a + b)
((a + b) + (c + d))
说明:第一个定义“var”告诉您它可以是符号a
... g
之一。第二个定义“fpip”告诉你有“var”或(fpip + fpip)
的复合表达式。因此,这意味着a
是一个有效的“fpip”,因为a
是一个有效的“var”。这也意味着(a + b)
是一个有效的“fpip”。通过在compund表达式中使用“fpip”代替“var”,你得到的是嵌套,就像有效的“fpip”((a + b) + (c + d))
一样。
作为暗示。您的程序将反映定义。它将检查参数是否为var,如果不是,则需要检查它是否与第二个定义类似,其中包括两个递归调用以检查每个部分是否也有效。
什么没有得到很好的解释是varlist
的目的。我想它代表分配的变量,并且“var”不仅需要a
... g
才有效,而且varlist
中的标识符也存在,因为它有效。这是一个有根据的猜测,因为我已经分享了我的口译员,但我认为它应该更明确。例如。也许:
(fpip? 'c '(b a q)) ; ==> #f (c is in "var" definition but not in varlist)
(fpip? 'a '(b a q)) ; ==> #t (a is in "var" definition and in varlist)
(fpip? 'q '(b a q)) ; ==> #f (q is not in "var" definition)