如何计算Scheme中列表中的语句数

时间:2012-11-27 22:10:30

标签: scheme racket

声明 - >如果是bool然后是statement_list - >而bool statement_list - > id =表达式

所以如果输入:((id = id + id)(如果bool那么(如果bool那么(id = id + id))(id = const / const)(id = id + id))(而bool( id = id - const)(id = id - id)))

报表数量应为9。

1 个答案:

答案 0 :(得分:4)

Scheme是homoiconic。无法区分表示Scheme代码的列表(例如语句)和表示数据的列表,因为Scheme代码 Scheme数据。但是,当然可以计算列表中包含的列表数量,这可以通过以下函数完成。

(define (list-count list)
  (cond ((null? list) 0)
        ((list? (car list))
         (+ (list-count (car list)) 
            (list-count (cdr list))
            1))
        (else (list-count (cdr list)))))

根据您的规范,当您在问题中给出列表时,这将返回9

> (list-count '((id = id + id)(if bool then (if bool then ( id = id + id ))(id = const / const)(id = id + id))(while bool (id = id - const)(id = id - id))))
9