Racket的输入和输出示例

时间:2018-04-08 03:51:06

标签: scheme racket s-expression

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

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)

1 个答案:

答案 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)