【问题标题】:Scheme - Beginner Syntax Issues with greater than, less than, and an and condition方案 - 大于、小于和和条件的初学者语法问题
【发布时间】:2020-09-16 19:57:54
【问题描述】:

我刚刚开始在 DrRacket 中编写方案。然而,就像我们都知道的那样,语法上的那些小变化总是把我们搞砸!

我相信我的错误在于和条件。如果有人可以看看并告诉我出了什么问题,那就太好了!

; in-range?: int int list of numbers --> boolean
(define in-range?
  (lambda (a b s)
    (cond [(null? s) #t] ;List is empty
          [(null? a) #f]
          [(null? b) #f]
          [((and >= (car s)) ((a) <= (car s)) (b)) (in-range? (a) (b) (cdr s))]
          [else #f]
     )))

【问题讨论】:

  • 我想知道为什么你有 null? 检查 ab,因为签名说 ab 是整数,而不是列表
  • 如果它们是空的则返回 false,我在几分钟前意识到如果它们是空的,程序甚至都不会运行。

标签: scheme racket


【解决方案1】:

想象一下这种形式:

(test a b)

test 不是语法操作数时,您可以看到它是一个应用程序,因为括号。然后评估test,预期结果是一个可以使用评估参数ab 调用的过程。

你有这个作为条件术语中唯一的表达:

((and >= (car s)) ((a) <= (car s)) (b)) (in-range? (a) (b) (cdr s))

这是一个应用程序。 (and &gt;= (car s)) ((a) &lt;= (car s)) (b)) 不是语法操作数。然后对其进行评估,预期结果是一个包含至少一个参数的过程,即对(in-range? (a) (b) (cdr s)) 的评估。

由于表达式是and,这是一个语法操作数,我们知道它要么是#f,要么是#t,你应该得到类似Application: not a procedure的错误

Scheme 中的括号就像 C# 和 JavaScript 等算法语言中的括号一样。想象一下这个表达式:

((a.car >=)(), (<= a() s.car)())(in-range(a(), b(), s.cdr))

JavaScript 中也有很多语法错误:-o

【讨论】:

  • 谢谢西尔韦斯特!这很有意义:)
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2022-06-16
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 2018-01-08
相关资源
最近更新 更多