2016-04-02 43 views
0

Bir işlev (f) ve bir Parametre olarak Liste alan bir işlev (son) oluşturmaya çalışıyorum. Liste (odd?) Işlevine iletilir ve listedeki son öğe tuhaf ise true (#t) döner, false (#f) döndürür. Ancak aşağıdaki kod çalışmıyor, doğru yol nedir? işlevi bir parametre olarak bildirmek.Düzeni bir parametre olarak parametre olarak geçirme

(define (last f L) 
(if (null? L) '() (last f (cdr L)))) 

(tek son? '(0 5 3 8 6 7)) Eğer fonksiyon yazdım nasıl İçin

+0

“İşlev parametresi olarak bildirilmeye” gerek yok; Sorununuz tamamen ilgisiz. İçsel ifadenin etrafında fazladan bir küme var, bu yüzden çağrı sadece şöyle olmalı: '(son garip? '(0 5 3 8 6 7))'. –

+0

İşaretlediğiniz için teşekkürler. Sorunuzu yorumunuza dayalı olarak düzenledim. – Siva

cevap

1

Burada yerleşik işlevler kullanarak bir çözüm nasıl yazabileceğinizi, bir yordamı parametre olarak geçirebilmek için doğru sözdizimini fark ettiğinizi ve aynı zamanda bu işlevin ismini last olarak adlandırmanın kötü bir fikir olduğunu fark ettiğinizi de unutmayın. Mevcut bir prosedür ile, sorunu çözmek için kullanmanız gereken aynı!

(define (my-last f L) 
    (f (last L))) 

kesinlikle sıfırdan işlevi yazmak zorunda, o zaman ne ihtiyaç vardır baz durumlarda anladığınızdan emin olun: beklendiği gibi

(define (my-last f L) 
    (cond ((null? L) #f) 
     ((null? (cdr L)) (f (car L))) 
     (else (my-last f (cdr L))))) 

iki durumda da, çalışır:

(my-last odd? '(0 5 3 8 6 7)) 
=> #t 
+0

"Last" işlevini kullanmadan çözümü yazmanın bir yolu var mı? '(define (son-son L) (eğer (null? L) '() (son-f (cdr L)))) – Siva

+1

@SivabalanBalasubramanian, kendi" son "işlevinizi yazarak, ama yapmamalısınız - daima yerleşik, mevcut işlevleri kullanmayı tercih edin: tekerleği yeniden icat etmeyin;) –

-1

, Görüúmeye set fazladan parantez var. Birisi size yorumlarda önerdiği gibi (last odd? '(0 5 3 8 6 7)) olmalıdır.