Racket的输入和输出示例

问题描述 投票:0回答:1

我不想帮助解决这个问题,但我想确切地知道它的要求。并且为了更好地理解它的要求,我问是否有人可以提供示例输入及其相应的输出。

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)
scheme racket s-expression
1个回答
0
投票

有效“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)
© www.soinside.com 2019 - 2024. All rights reserved.