Сопоставление с образцом в схеме - PullRequest
3 голосов
/ 27 июня 2009

Как мне принять следующий ввод?

(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)

что-то вроде

(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

РЕДАКТИРОВАТЬ: ЭТО НЕ МОЯ РАБОТА. Я пытаюсь написать что-то вроде ELIZA из PAIP, но я знаю только, как написать шаблон, начинающийся со слова.

1 Ответ

3 голосов
/ 28 июня 2009

Вы упоминаете символы, но затем используете цифры в вашем примере. Я использую числа здесь, но переключение на символы тривиально.

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