Pattern matching in a schema

How to accept the next input?

(list of 0 or more charcters and ends with 3) or   
(list of 1 or more characters 4 and  0 or more characters after 4)

sort of

(match ( list 3)) -> #t
(match ( list 1  2 3)) -> #t
(match (list 1 2 3 4)) -> #t
(match (list 1 2 3 4 5)) -> #t
(match (list 4)) -> #f

EDIT: THIS IS NOT MY SET. I am trying to write something like ELIZA from PAIP, but I only know how to write a template that starts with a word.

+3
source share
1 answer

You specify characters, but then use numbers in your example. I use numbers here, but switching to characters is trivial.

(require scheme/match)
(define satisfies
  (match-lambda
    [(list (? number?) ... 3) #t]
    [(list (? number?) ..1 4 (? number?) ...) #t]
    [_ #f]))
+3
source

Source: https://habr.com/ru/post/1711410/


All Articles