1

我刚开始打球,如果这是一个愚蠢的问题,请原谅。有人能告诉我我到底做错了什么吗?我试图找到的价值:

(cond
  [(<= (string-length s) 5) 10]
  [(string=? s “hello”) 50]
  [(string=? (substring s 1 4) “ell”) 25]
  [else 130])

当 s 为 (i)"hello"且 s 为 (ii)时"hellos"

我用数字做了类似的事情,我所要做的就是用数字定义它并且没有问题。我不知道我在这里做错了什么。

编辑-

喜欢这个。当 n 为 150000 时,他们要求 n 的值。我只是将 n 定义为 150000,我得到“mb”作为值。

;;(define n 15000)

(cond
  [(<= n 1000) (number->string n)]
  [(<= n 5000) 
(string->symbol 
(string-append "num" (number->string n)))]
  [else (substring 
(string-append "number" (number->string n)) 2 4)])

我正在尝试对上述内容做同样的事情。如果这有任何意义。

4

1 回答 1

1

请注意,字符串必须被包围""才能工作,在您的代码中,您使用的是类似但不完全正确的双引号。试试这个:

(define s "hello")

(cond
  [(<= (string-length s) 5) 10]
  [(string=? s "hello") 50]
  [(string=? (substring s 1 4) "ell") 25]
  [else 130])

除此之外,代码本身没有错误,但由于不同条件出现在 中的顺序cond,获得的结果可能不是您预期的结果,尝试切换一些,重新组织它们等。

请记住,条件是从上到下评估的,并且将执行第一个为真的条件。例如,如果输入是"hello",则(<= (string-length s) 5)在 之前进行评估和执行(string=? s "hello"),因为第一个条件为真,而第二个条件永远不会达到,因此永远不会执行。

于 2013-01-20T19:08:32.280 回答