Scheme 检查连续数字时的“应用程序:非程序”

Scheme 检查连续数字时的“应用程序:非程序”,scheme,racket,Scheme,Racket,为什么会出现错误?您有一个双精度前置条件。应该是 #lang scheme (define consecutive? (lambda(a b c) ((cond [(and (= (- b a) 1) (or (= (- c b) 1) (= (- a c) 1))) "true"] [(and (= (- a b) 1) (or (= (- c a) 1) (= (- b c) 1))) "true"] [(and (= (- c a)

为什么会出现错误?

您有一个双精度前置条件。应该是

#lang scheme

(define consecutive?
  (lambda(a b c)
    ((cond [(and (= (- b a) 1) (or (= (- c b) 1) (= (- a c) 1))) "true"]
           [(and (= (- a b) 1) (or (= (- c a) 1) (= (- b c) 1))) "true"]
           [(and (= (- c a) 1) (or (= (- a b) 1) (= (- b c) 1))) "true"]
           [(and (= (- a c) 1) (or (= (- c b) 1) (= (- b a) 1))) "true"]
           [else "false"]))))

(consecutive? 2 3 4)
编辑如果我正确理解您的算法,则更通用的版本为:

(define consecutive? 
  (lambda(a b c) 
    (cond
      [(and (= (- b a) 1)(or (= (- c b) 1)(= (- a c) 1))) "true"]
      [(and (= (- a b) 1)(or (= (- c a) 1)(= (- b c) 1))) "true"]
      [(and (= (- c a) 1)(or (= (- a b) 1)(= (- b c) 1))) "true"]
      [(and (= (- a c) 1)(or (= (- c b) 1)(= (- b a) 1))) "true"]
      [else "false"])))

diff1在哪里?只需检查数字是否连续n,n+1,n+2。。。新的呢?将列表排序后调用前者。

在cond之前有一个double。应该是

#lang scheme

(define consecutive?
  (lambda(a b c)
    ((cond [(and (= (- b a) 1) (or (= (- c b) 1) (= (- a c) 1))) "true"]
           [(and (= (- a b) 1) (or (= (- c a) 1) (= (- b c) 1))) "true"]
           [(and (= (- c a) 1) (or (= (- a b) 1) (= (- b c) 1))) "true"]
           [(and (= (- a c) 1) (or (= (- c b) 1) (= (- b a) 1))) "true"]
           [else "false"]))))

(consecutive? 2 3 4)
编辑如果我正确理解您的算法,则更通用的版本为:

(define consecutive? 
  (lambda(a b c) 
    (cond
      [(and (= (- b a) 1)(or (= (- c b) 1)(= (- a c) 1))) "true"]
      [(and (= (- a b) 1)(or (= (- c a) 1)(= (- b c) 1))) "true"]
      [(and (= (- c a) 1)(or (= (- a b) 1)(= (- b c) 1))) "true"]
      [(and (= (- a c) 1)(or (= (- c b) 1)(= (- b a) 1))) "true"]
      [else "false"])))

diff1在哪里?只需检查数字是否连续n,n+1,n+2。。。新的呢?调用列表中的前一个。

这不是你的错误的来源,但是:考虑使用t和f而不是字符串,并分解出你的COND字符中的重复。除此之外,如果你搜索,你会发现很多问题已经得到了回答。COND…期望COND…产生一个结果R,这是一个过程,然后尝试调用R。这不是你的错误的来源,但是:考虑使用T和F而不是字符串,并分解出你的COND字符中的重复。除此之外,如果你搜索,你会发现很多问题已经得到了回答。cond…期望cond…生成一个作为过程的结果r,然后尝试调用r。