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")ます。これは、最初の条件が true であり、2 番目の条件に到達しないため、実行されないためです。

于 2013-01-20T19:08:32.280 に答える