2014-12-18 3 views

ответ

2

Это зависит от того, какой интерпретатор вы используете. В стандартной схеме определяется только length. В других интерпретаторах (скажем, Racket) существует count, но он отличается, он получает список и предикат и возвращает количество элементов в списке, отвечающем этому условию.

Я не знаю, в каком интерпретатор count определяется как функция одного параметра, который возвращает длину списка, (В Ракетка (count '(1 2 3)) вызывает ошибку), но мне кажется, что count это просто псевдоним для length в вашем интерпретаторе (другими словами: это одно и то же) - убедитесь, пожалуйста, проверьте документацию. Если бы мне пришлось выбирать один, я бы использовал length, что является стандартным и будет работать везде.

2

length возвращает количество элементов в списке.

count не является стандартной процедурой упоминается ни в одном из официальных отчетов Scheme (я искал R5RS, R6RS и R7RS), так что это не является частью схемы. Во многих реализациях вы получите некоторую ошибку, заявив, что count не существует. Это радикально отличается от ожидаемого результата, который у вас есть в вашем вопросе, но это более вероятный результат, если вы должны его протестировать в 5 реализациях Схемы.

Нет причин использовать расширение, зависящее от реализации, когда его результат совпадает с length.

Я попытался (count '(1 2 3)) в Сталине (r4rs), Scm (r5rs), курица (r5rs), гамбит (r5rs), ракетка (оба r5rs и r6rs), Икарус (r6rs), чиби-схема (r7rs), гош/gosh (r7rs). Ни один из них не имеет count.

[email protected]:/p/n/sylwester$ csi 

CHICKEN 
(c) 2008-2013, The Chicken Team 
(c) 2000-2007, Felix L. Winkelmann 
Version 4.8.0.5 (stability/4.8.0) (rev 5bd53ac) 
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] 
compiled 2013-10-03 on aeryn.xorinia.dim (Darwin) 

#;1> (count '(1 2 3)) 

Error: unbound variable: count 

    Call history: 

    <syntax>  (count (quote (1 2 3))) 
    <syntax>  (quote (1 2 3)) 
    <syntax>  (##core#quote (1 2 3)) 
    <eval> (count (quote (1 2 3))) <-- 
#;1> 
[email protected]:/p/n/sylwester$ gsi 
Gambit v4.6.9 

> (count '(1 2 3)) 
*** ERROR IN ##raise-unbound-global-exception -- Unbound variable: count 
1> 
> 
*** EOF again to exit 
[email protected]:/p/n/sylwester$ ikarus 
Ikarus Scheme version 0.0.4-rc1+, 64-bit (revision 1870, build 2012-02-21) 
Copyright (c) 2006-2009 Abdulaziz Ghuloum 

> (count '(1 2 3)) 
Unhandled exception 
Condition components: 
    1. &undefined 
    2. &who: eval 
    3. &message: "unbound variable" 
    4. &irritants: (count) 
> 
[email protected]:/p/n/sylwester$ plt-r5rs 
Welcome to Racket v6.1.1. 
R5RS legacy support loaded 
> (count '(1 2 3)) 
count: undefined; 
cannot reference undefined identifier 
    context...: 
    /usr/share/racket/collects/racket/private/misc.rkt:87:7 
    /usr/share/racket/pkgs/r5rs-lib/r5rs/run.rkt: [running body] 

[email protected]:/p/n/sylwester$ echo "(import (rnrs)) 
             (display (count '(1 2 3)))" > test.scm 
[email protected]:/p/n/sylwester$ plt-r6rs test.scm 
test.scm:2:10: count: unbound identifier in module 
    in: count 
    context...: 
    /usr/share/racket/pkgs/r6rs-lib/r6rs/run.rkt: [running body] 

[email protected]:/p/n/sylwester$ chibi-scheme 
> (count '(1 2 3)) 
ERROR on line 1: undefined variable: count 
> 
[email protected]:/p/n/sylwester$ 
[email protected]:/p/n/sylwester$ gosh 
gosh> (length '(1 2 3)) 
3 
gosh> (count '(1 2 3)) 
*** ERROR: unbound variable: count 
Stack Trace: 
_______________________________________ 
gosh> 
[email protected]:/p/n/sylwester$ scm 
SCM version 5e5, Copyright (C) 1990-2006 Free Software Foundation. 
SCM comes with ABSOLUTELY NO WARRANTY; for details type `(terms)'. 
This is free software, and you are welcome to redistribute it 
under certain conditions; type `(terms)' for details. 
;loading /usr/share/slib/require 
;done loading /usr/share/slib/require.scm 
;loading /usr/share/slib/require 
;done loading /usr/share/slib/require.scm 
;loading /usr/lib/scm/Link 
;done loading /usr/lib/scm/Link.scm 
;loading /usr/lib/scm/Transcen 
;done loading /usr/lib/scm/Transcen.scm 
> (count '(1 2 3)) 

;ERROR: "/usr/lib/scm/Iedline.scm": unbound variable: count 
; in expression: (count (quote (1 2 3))) 
; in top level environment. 
;STACK TRACE 
1; (#@let ((tail (#@lambda (c) (#@if (#@char? #@c) #@c (#@let* ((... 
2; (count (quote (1 2 3))) 

> 
[email protected]:/p/n/sylwester$ echo "(display (count '(1 2 3)))" > test.scm 
[email protected]:/p/n/sylwester$ stalin -On test.scm 
test.scm:1:10:Unbound variable 
Смежные вопросы