OpenSearchを使うAPIにアクセスする

yamasushi(2013/03/26 04:33:25 UTC)OpenSearch互換のAPIにアクセスするときのパターンを抽出しました。

; Opensearch的なアクセスをする列を生成する
; gunfoldに似せたもの
; %unfold  ... unfoldする関数
; %nullseq ... 空のseq
; n .... 取得するアイテム単位取得数(ページあたりのアイテム数)
; p .... seedから総数を取得する関数
; f .... seedから値を取得する関数
; g .... アイテム単位取得数と要素indexからseedを取得する関数
; :key
;    start-index ..... indexの開始番号(デフォルトは1)
;                      0ベースの場合もある
(define (opendata-%seq%
          %unfold %null n p f g :key (start-index 1))
  ; %unfoldのシードは (index . seed)にする
  (let* [ [ seed ($ cons start-index $ g n start-index ) ] [total ($ p $ cdr seed) ] ]
    ;#?=total
    (if (and total (> total 0) )
      (%unfold
          (^s (not s) )
          (^s ($ f $ cdr s))
          (^s (and-let* [ [next (+ (car s) n)] [total ($ p $ cdr s)] ]
            (if (< (- next start-index) total )
              (cons next (g n next) )
              #f ) ) )
          seed )
      %null ) ) )
More ...