Şemada İkili Arama Ağacı, değer BST mevcut ise basitçe doğru ya da yanlış dönmek için Dr Raket kullanmaya çalışıyor. Hata

oy
2

Dr. Raket, dil Pretty Big kullanıyorum ve ben basit ikili arama ağacı yapmaya çalışıyorum in? Bir değer ikili arama ağacında olup olmadığını döndürür yöntemi. (Bunu vb dizeleri, int'leri içerir olsun) arama ağacının her türlü kabul, genel olması gerekiyor, ama beni deli ediyor bu hata mesajıyla çalıştırıyorum. Herhangi bir yardım burada, takdir kodudur edilir:

EDITED :: Bu sayılarla (veya en azından dizeleri ile çalışmaz) .. Yeni konu dışındaki herhangi bir şeyle artık çalışır, ancak:

(define (bstsearch tree value)
  (cond 
  ((null? tree) #f)
  ((< value (car tree))
      (bstsearch  (cadr tree) value))
  ((> value (car tree))
      (bstsearch (caddr tree) value))
  ((= value (car tree))
      #t)
  ))

Ben alıyorum hata diyor ki:

<: expects type <real number> as 1st argument, given: horse; other arguments were: horse

Kullanırken:

 (bstsearch '(horse (cow () (dog () ())) (zebra (yak ()()) ())) horse)

girdi olarak kullanılmaktadır.

Oluştur 05/12/2010 saat 04:46
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
2

Sen Pars başka sette argümanları sarmak, böylece kullanmamalısınız

(bstsearch  (cadr tree) value)

yerine

(bstsearch  ((cadr tree) value))
Cevap 05/12/2010 saat 05:00
kaynak kullanıcı

oy
2

Bir problem size <ve> ters olması. Eğer sol alt ağaç olmak istiyorum varsayarsak küçük, daha sonra (<value (araba ağacı)) (cadr ağacının) ile tekrar araması gerekir.

Ayrıca yerine (#t) ait #t kullanmalıdır.

Cevap 05/12/2010 saat 05:25
kaynak kullanıcı

oy
3

, Yeni sorunu ile ilgili olarak <ve> sadece sayılar için çalışır. Kolay bir çözüm bstsearch prosedürüne argümanlar olarak karşılaştırmak işlevleri geçmek olacaktır.

önce belirttiğimiz üzere, koduyla doğru girinti ediniz.

Cevap 05/12/2010 saat 06:23
kaynak kullanıcı

oy
1

Sizin yeni karşılaştığı sorun nedeniyle karşılaştırıcısı fonksiyonu "=" taşımaktadır. Eğer o değiştirirseniz "eşit?" o jenerik olmalı işlev ve verilerin her türlü çalışabilir. Eğer jenerik yapmak istiyorsanız Comparers da değişmelidir. Sen olması gerektiği giriş böylece jenerik versiyonu olarak kullanıcıdan almak gerekir:

(define (bstsearch tree value comparer)

(cond 

((null? tree) #f)

  ((equal? value (car tree)) #t)

  ((comparer value (car tree))
      (bstsearch  (cadr tree) value))

  ((not (comparer value (car tree)))
      (bstsearch (caddr tree) value))

  ))
  • Comparer fonksiyonu biçiminde olmalıdır (XX -> boole), "<", ">", "? Dize <" Örneklerde inşa edilir ama sen de kendi veri yapısı için kendi karşılaştırıcısı yazabilirsiniz

  • eşit durum 2. hattı içinde olduğuna dikkat edilmelidir. Umarım bu yardımcı olur :)

Cevap 06/04/2011 saat 10:05
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more