2016-12-14 10 views
0

Как использовать count для подсчета конкретных номеров в списке?Подсчет конкретных чисел в списке

(define lst '(1 1 1 1 2 2 2 3 3 3 3 3 4 4) 
(count 2 lst);; what should I use at the place of '2' 

Но это приводит к следующей ошибке.

кол-во: нарушение контракта
ожидается: процедура?
Дано: 2

ответ

1

count подсчитывает количество элементов списка, для которых процедура возвращает true. В этом случае вам нужна процедура, которая возвращает true только если элемент равен 2: (lambda (x) (equal? x 2)).

В полной мере, вы можете сделать

(define lst '(1 1 1 1 2 2 2 3 3 3 3 3 4 4)) 
(count (lambda (x) (equal? x 2)) lst) 

Side Примечание: вы можете сократить его, заменив лямбда-выражение с (curry equal? 2).

+1

Я никогда раньше не видел использование «карри». Это главным образом для замены лямбда-выражения? @Gibstick – Toat

+1

@Toat Да, вот как я его использую (экономно). – Gibstick