Path: ...!weretis.net!feeder9.news.weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: HenHanna Newsgroups: comp.lang.lisp Subject: diff1p? -------- A simple lisp problem Date: Sat, 15 Jun 2024 17:20:31 -0700 Organization: A noiseless patient Spider Lines: 63 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Sun, 16 Jun 2024 02:20:32 +0200 (CEST) Injection-Info: dont-email.me; posting-host="35c3840a03f107b42fbf945be62926e9"; logging-data="3896403"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18ziv7sEoHtAM+pHDwQuYzzsDH0c4FVTEk=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:xyTzXgMHdkZX5wKpnMLq+j4FZV4= Content-Language: en-US In-Reply-To: Bytes: 2620 On 6/15/2024 1:08 PM, HenHanna wrote: > On 6/14/2024 8:45 PM, B. Pym wrote: >> Frank Schwieterman wrote: >> >>>> I am Lisp beginner and I am doing a simple execise on lisp. I was asked >>>> to write a lisp program , by using either recursion or do, to return >>>> true if the difference between each successive pair of the them is 1. (or LESS) >>>> >>>> ie: >>>> >>>>> (difference '(2 1)) >>>> T >>>>> (difference'(3 4 5 6 5 4)) >>>> T >>>>> (differnce '(3 4 5 3)) >>>> NIL >>   .... >>> >>> (defun difference (param) >>>       (if (> (length param) 1) >>>          (if (<= (abs (- (first param) (first (rest param)))) 1 ) >>>             (difference (rest param)) >>>             nil >>>             ) >>>          T >>>          ) >>>       ) looks good. except for CADR (second) and ) ) ) > > > (define (diff1p?  x) >   (or (null? x) >       (null? (cdr x)) >       (and (= 1 (abs (- (car x) (cadr x)) )) >            (diff1p? (cdr x)) ))) > > >> >> Gauche Scheme >> >> (define (diff1? xs) >>    (every >>      (lambda (a b) (= 1 (abs (- a b)))) >>      xs >>      (cdr xs))) >> >> (diff1? '(2 3 4 3 4 5 6 7 8 9 8))     ===>  #t > >> (diff1? '(2 3 4 3 4 5 6 7 8 9 8 0))   ===>  #f in Scheme (Gauche), is there a way to write it more like this ? def diff1(x): return all( abs(x[i] - x[i+1]) == 1 for i in range(len(x)-1) )