>> 古い記事: JavaScript: canvas で点線・破線を描くためのライブラリを作ってみた
<< 新しい記事: ブログに関するメモ(仮)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Emacs Lisp メモ: Enumerable的な何かのようなもの

まあなんというか練習も兼ねた書き散らかしです。ものすごく適当です。 Emacs Lisp 詳しくないのでダメコードだと思います。 気が向いたら追加・修正するかも。


(defun each (f list)
      (let ((temp list))
        (while (not (eq (car temp) nil))
          (funcall f (car temp))
          (setq temp (cdr temp)))))
;;=> dolist
;; list.each{|x| print x }
;; ↓
;; (dolist (x list)
;;   (print x))


(defun all? (f list)
  (let ((temp list)
        (flag t))
    (while (not (eq nil (car temp)))
      (if (eq nil (funcall f (car temp)))
          (setq flag nil))
      (setq temp (cdr temp)))
    flag))


;; map, collect
(mapcar
 '(lambda (x) (+ x 1))
 '(1 2))

(defun detect (f list) ; or find
  (let ((temp list)
        (result nil))
    (while (and (eq result nil)
                (> (length temp) 0))
      (if (funcall f (car temp))
          (setq result (car temp)))
      (setq temp (cdr temp)))
    result))


(defun find-all (f list) ; or select
  (let ((temp list)
        (result '()))
    (while (< 0 (length temp))
      (if (funcall f (car temp))
          (setq result (append result (list (car temp)))))
      (setq temp (cdr temp)))
    result))
;; => remove-if, remove-if-not


(defun include? (f list) ; or member?
  (let ((temp list)
        (result nil))
    (while (and (eq nil result)
                (< 0 (length temp)))
      (if (funcall f (car temp))
          (setq result t))
      (setq temp (cdr temp)))
    result))
;;=> memq(eq で比較), member(equal で比較)


;; The MIT License

;; Copyright (c) 2009 sonota (yosiot8753@gmail.com)

;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:

;; The above copyright notice and this permission notice shall be included in
;; all copies or substantial portions of the Software.

;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
;; THE SOFTWARE.
include?, member?
→ memq(eq), memql(eql), member(equal)

>> 古い記事: JavaScript: canvas で点線・破線を描くためのライブラリを作ってみた
<< 新しい記事: ブログに関するメモ(仮)
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。