Vinnaren i pepparkakshustävlingen!
2016-09-26, 05:14
  #1
Medlem
Hej, precis börjat programmera i Lisp och jag är fast.

Ska implementera multiplikation utan att använda Schemes fördefinierade * och +.

Multiplikation är en en form av addition, så vill därför definiera plus till att börja med.

Citat:
> (define succ
(lambda (x)
(+ x 1)))

Citat:
> (define pred
(lambda (x)
(- x 1)))

Citat:
> (define plus
(lambda (a b)
(if (= a 0)
b
(succ (plus (pred a) b)))))

Citat:
> (define mul
(lambda (a b)
(cond ((= a 0) 0)
(else (plus (a (mul (a (pred b)))))))))

Det är här skon klämmer. Basvillkoret är att om a=0 ska 0 returneras. Annars (a + (a*(b-1))). Jag kan inte få rekursionen att bli rätt... Men tänker jag åt rätt håll?
__________________
Senast redigerad av PecsPerfection 2016-09-26 kl. 05:29.
Citera
2016-09-27, 20:07
  #2
Medlem
[quote=PecsPerfection|58590812]Nu var det länge sedan jag programmerade lisp men det ser ut att vara för många parenteser, och sedan måste du testa om b är noll eftersom det är b du räknar ner. Fast du kanske redan löst det.

Kod:
> (define mul
(lambda (a b)
(cond ((= b 0) 0)
(else (plus a (mul a (pred b)))))))
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback