我不想帮助解决这个问题,但我想确切地知道它的要求。并且为了更好地理解它的要求,我问是否有人可以提供示例输入及其相应的输出。
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)
答案 0 :(得分:0)
有效" fpip"的示例表达式:
a
(a + b)
((a + b) + (c + d))
<强>说明:强>
第一个定义&#34; var&#34;告诉您它可以是其中一个符号a
... g
。
第二个定义&#34; fpip&#34;告诉你有&#34; var&#34;或(fpip + fpip)
的复合表达式。因此,这意味着a
是有效的&#34; fpip&#34;因为a
是有效的&#34; var&#34;。这也意味着(a + b)
是一个有效的&#34; fpip&#34;。你还可以使用&#34; fpip&#34;取代&#34; var&#34;在compund表达式中是嵌套,就像有效的&#34; fpip&#34; ((a + b) + (c + d))
。
作为提示。您的程序将反映定义。它将检查参数是否为var,如果不是,则需要检查它是否与第二个定义相似,其中包括两个递归调用以检查每个部分是否也有效。
varlist
的目的是什么没有得到很好的解释。我想它代表了分配的变量,并且它代表了一个&#34; var&#34;不仅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)