If statement 方案-正确使用;及;在if语句中

If statement 方案-正确使用;及;在if语句中,if-statement,scheme,conditional-statements,racket,If Statement,Scheme,Conditional Statements,Racket,我目前正在为一项任务写一个小项目。我已经很久没有使用Scheme了,所以我对语法不是很在行 问题是在if语句中使用“and”。我在日历中有一个约会列表,但我只想要那些在特定时间间隔之间的约会。因此,我需要检查开始和结束时间 我希望实现的目标在C中是这样的: 获取日历“cal”和时间间隔(不时) 然后我从cal获取约会(应用程序),并对其进行迭代。对于每一个,我检查from time是否大于“app”的开始时间。相应地返回true或false。这很好,但是我仍然需要考虑约会是否在“时间”之前结束。

我目前正在为一项任务写一个小项目。我已经很久没有使用Scheme了,所以我对语法不是很在行

问题是在if语句中使用“and”。我在日历中有一个约会列表,但我只想要那些在特定时间间隔之间的约会。因此,我需要检查开始和结束时间

我希望实现的目标在C中是这样的:

获取日历“cal”和时间间隔(不时) 然后我从cal获取约会(应用程序),并对其进行迭代。对于每一个,我检查from time是否大于“app”的开始时间。相应地返回true或false。这很好,但是我仍然需要考虑约会是否在“时间”之前结束。这应该是一个简单的问题,添加另一个条件,但我根本无法让它工作

有人能帮我检查第二个变量的正确语法吗? 我知道,但我仍然不能解决我的问题

我试着把if语句改成cond

我还尝试了“and”部分的一系列变体,与此类似,但无法获得正确的语法:

(define (time-calendar cal from-time to-time)
  (map (lambda (app)(if (and((> from-time (send 'getstart app))) (< to-time (send 'getend app))) #t #f))
         (send 'getappointments cal)))
(定义(时不时的日历校准)
(映射(lambda(应用程序)(如果(和(>从时间(发送“getstart应用程序”))(<到时间(发送“getend应用程序”)))35;t#f))
(发送“getCal”))
(和表达式1表达式2…)
过多的括号被理解为表达式将像过程一样应用。例如

(and ((if some-var + -) 4 6))
这里的结果是-2或10,具体取决于some-var的值。
是冗余的,因为
(和x)
x
相同

至于你的代码,这里是它应该是:

(define (time-calendar cal from-time to-time)
  (map (lambda (app)
         (and (> from-time (send 'getstart app)) 
              (< to-time (send 'getend app))))
       (send 'getappointments cal)))
(和表达式1表达式2…)
过多的括号被理解为表达式将像过程一样应用。例如

(and ((if some-var + -) 4 6))
这里的结果是-2或10,具体取决于some-var的值。
是冗余的,因为
(和x)
x
相同

至于你的代码,这里是它应该是:

(define (time-calendar cal from-time to-time)
  (map (lambda (app)
         (and (> from-time (send 'getstart app)) 
              (< to-time (send 'getend app))))
       (send 'getappointments cal)))

我从来没有想过我可以完全跳过“如果”。谢谢你的详细解释,我完全理解你的答案!我的下一篇文章可能是对真与假的评估——无论我如何选择时间、时间和约会中存储的时间,所有的东西都会评估为假。好吧,至少我还有一点进步。:)@Treelink我没读过你的逻辑。似乎您可能需要使用
从时间切换到时间(发送“getstart应用程序”)
意味着
(发送“getstart应用程序”)
需要小于时间且大于时间。例如
(>531);=>#t自
5>3>1以来
。你看,你又对了一部分!我在别的地方也搞砸了,但是>确实也应该是<!再次感谢!至少可以说,你真的很有帮助。我从来没有想过我可以完全跳过“如果”。谢谢你的详细解释,我完全理解你的答案!我的下一篇文章可能是对真与假的评估——无论我如何选择时间、时间和约会中存储的时间,所有的东西都会评估为假。好吧,至少我还有一点进步。:)@Treelink我没读过你的逻辑。似乎您可能需要使用
从时间切换到时间(发送“getstart应用程序”)
意味着
(发送“getstart应用程序”)
需要小于时间且大于时间。例如
(>531);=>#t自
5>3>1以来
。你看,你又对了一部分!我在别的地方也搞砸了,但是>确实也应该是<!再次感谢!至少可以说,你真的帮了大忙。
(define (time-calendar cal from-time to-time)
  (map (lambda (app)
         (> from-time (send 'getstart app) to-time))
       (send 'getappointments cal)))