Почему эти ormap и / или функции выдают ошибку? - PullRequest
2 голосов
/ 11 июня 2019

Я пытаюсь выяснить, не является ли какой-либо из символов в строке печатным символом (integer value > 127). Я пробовал 2 функции, одну с ormap и другую с for/or, но обе не работают:

(define (isBinary line)
  (for/or ([ch line])
    ((char->integer ch) > 127)))

(define (isBinary2 line)
  (ormap (lambda (ch) ((char->integer ch) > 127)) (string->list line)))

(displayln (isBinary "abcd1234"))
(displayln (isBinary2 "abcd1234"))

Оба выдают одну и ту же ошибку:

application: not a procedure;
 expected a procedure that can be applied to arguments
  given: 97
  arguments...:

Где проблема и как ее можно решить? Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 11 июня 2019

В отличие от других языков, где > - это имя оператора, в Racket > - это имя нормальной функции.Для сравнения двух чисел напишите (< a b), который является стандартным способом использования <.

. Для тех, кому нравится инфиксная запись, Racket также предоставляет не часто используемый синтаксис:

(a . < . b)

который читатель превратит в

(< a b)
...