【问题标题】:Scheme Ill informed syntax计划病态的语法
【发布时间】:2021-04-26 23:06:00
【问题描述】:

我收到此错误:

;格式错误的语法: (define (mycount (lambda (n lst) (cond ((null? lst) 0) ((= (car lst) n) (+ 1 (mycount n (cdr lst)))) (else (mycount n (cdr lst))))))))

这是我的代码

  (lambda (n lst)
    (cond
      ((null? lst) 0)
      ((= (car lst) n) (+ 1 (mycount n (cdr lst))))
      (else (mycount n (cdr lst)))))))

(define (tagmatch
  (lambda (n lst)
    (cond
      ((null? lst) '())
      ((=(car lst)n) (cons 1(tagmatch n(cdr lst))))
      (else (cons 0 (tagmatch n(cdr lst)))))))

【问题讨论】:

    标签: scheme


    【解决方案1】:

    您尚未发布mycount 的完整定义,但括号在tagmatch 的定义中被错误放置(并且计数错误),这表明括号也错误地放置在mycount 中。

    当使用define 表单将对象绑定到变​​量时,变量周围不需要括号。只有在使用defun 风格的语法糖定义过程时才需要括号。

    (define mycount
      (lambda (n lst)
        (cond ((null? lst) 0)
              ((= (car lst) n)
               (+ 1 (mycount n (cdr lst))))
              (else
               (mycount n (cdr lst))))))
    
    (define tagmatch
      (lambda (n lst)
        (cond ((null? lst) '())
              ((= (car lst) n)
               (cons 1 (tagmatch n (cdr lst))))
              (else
               (cons 0 (tagmatch n(cdr lst)))))))
    

    这里definelambda 表达式中描述的匿名过程分别绑定到mycounttagmatch。 Scheme 有语法糖来定义一个没有显式lambda 表达式的过程;在这种情况下,需要用括号将过程名称及其参数分组:

    (define (mycount n lst)
      (cond ((null? lst) 0)
            ((= (car lst) n)
             (+ 1 (mycount n (cdr lst))))
            (else
             (mycount n (cdr lst)))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多