Rosetta Code/Rank languages by number of users: Difference between revisions

+Racket
(+Racket)
Line 352:
19: 59 - Common Lisp
20: 58 - AWK
</pre>
 
=={{header|Racket}}==
 
Note: the implementation is very similar to [[Rosetta_Code/Rank_languages_by_popularity#Racket|Rank languages by popularity]].
 
<lang racket>#lang racket
(require racket/hash
net/url
json)
(define limit 64)
(define (replacer cat) (regexp-replace #rx"^Category:(.*?) User$" cat "\\1"))
(define category "Category:Language users")
(define entries "users")
(define api-url (string->url "http://rosettacode.org/mw/api.php"))
(define (make-complete-url gcmcontinue)
(struct-copy url api-url
[query `([format . "json"]
[action . "query"]
[generator . "categorymembers"]
[gcmtitle . ,category]
[gcmlimit . "200"]
[gcmcontinue . ,gcmcontinue]
[continue . ""]
[prop . "categoryinfo"])]))
 
(define @ hash-ref)
 
(define table (make-hash))
(let loop ([gcmcontinue ""])
(define resp (read-json (get-pure-port (make-complete-url gcmcontinue))))
(hash-union! table
(for/hash ([(k v) (in-hash (@ (@ resp 'query) 'pages))])
(values (@ v 'title #f) (@ (@ v 'categoryinfo (hash)) 'size 0))))
(cond [(@ resp 'continue #f) => (λ (c) (loop (@ c 'gcmcontinue)))]))
(call-with-values
(thunk
(for/fold ([prev #f] [rank #f])
([item (in-list (sort (hash->list table) > #:key cdr))] [i (in-range limit)])
(match-define (cons cat size) item)
(define this-rank (if (equal? prev size) rank (add1 i)))
(printf "Rank: ~a ~a ~a\n"
(~a this-rank #:align 'right #:min-width 2)
(~a (format "(~a ~a)" size entries) #:align 'right #:min-width 14)
(replacer cat))
(values size this-rank)))
void)</lang>
 
{{out}}
<pre>
Rank: 1 (402 users) C
Rank: 2 (283 users) Java
Rank: 3 (281 users) C++
Rank: 4 (270 users) Python
Rank: 5 (243 users) JavaScript
Rank: 6 (175 users) Perl
Rank: 7 (171 users) PHP
Rank: 8 (142 users) SQL
Rank: 9 (134 users) UNIX Shell
Rank: 10 (123 users) C sharp
Rank: 10 (123 users) BASIC
Rank: 12 (119 users) Pascal
Rank: 13 (105 users) Haskell
Rank: 14 (94 users) Ruby
Rank: 15 (83 users) Fortran
Rank: 16 (71 users) Visual Basic
Rank: 17 (67 users) Prolog
Rank: 18 (63 users) Scheme
Rank: 19 (61 users) Common Lisp
Rank: 20 (59 users) AWK
Rank: 20 (59 users) Lua
Rank: 22 (52 users) HTML
Rank: 23 (46 users) X86 Assembly
Rank: 23 (46 users) Batch File
Rank: 23 (46 users) Assembly
Rank: 26 (44 users) Bash
Rank: 27 (40 users) Erlang
Rank: 27 (40 users) MATLAB
Rank: 29 (39 users) Forth
Rank: 29 (39 users) Lisp
Rank: 31 (37 users) Visual Basic .NET
Rank: 32 (36 users) APL
Rank: 32 (36 users) Tcl
Rank: 32 (36 users) Delphi
Rank: 35 (35 users) J
Rank: 36 (34 users) Brainf***
Rank: 37 (33 users) COBOL
Rank: 37 (33 users) Objective-C
Rank: 39 (32 users) Go
Rank: 39 (32 users) R
Rank: 41 (30 users) Mathematica
Rank: 42 (29 users) Perl 6
Rank: 43 (28 users) Clojure
Rank: 44 (25 users) OCaml
Rank: 44 (25 users) AutoHotkey
Rank: 44 (25 users) REXX
Rank: 47 (24 users) PostScript
Rank: 48 (23 users) Sed
Rank: 48 (23 users) Emacs Lisp
Rank: 48 (23 users) LaTeX
Rank: 51 (22 users) VBScript
Rank: 51 (22 users) CSS
Rank: 51 (22 users) MySQL
Rank: 51 (22 users) Scala
Rank: 55 (20 users) XSLT
Rank: 55 (20 users) Racket
Rank: 57 (19 users) 6502 Assembly
Rank: 58 (18 users) Z80 Assembly
Rank: 58 (18 users) Logo
Rank: 60 (17 users) Factor
Rank: 60 (17 users) Make
Rank: 60 (17 users) 8086 Assembly
Rank: 60 (17 users) F Sharp
Rank: 64 (16 users) PL/I
</pre>
 
Anonymous user