Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-02-19

UtiLispでL-99 (P15 各要素を任意の回数複製)

| 15:52 | UtiLispでL-99 (P15 各要素を任意の回数複製) - わだばLisperになる を含むブックマーク はてなブックマーク - UtiLispでL-99 (P15 各要素を任意の回数複製) - わだばLisperになる

何でか知りませんが、急にUtiLispでも書いてみたくなりました。

;; UtiLisp
(defun repli (lst times)
  (mapcan lst #'(lambda (x) (make-list times x))))

(defun make-list (n (elt nil))  
  (and (0> n) (err:argument-type n 'make-list))
  (do ((n n (1- n))
       (res () (cons elt res)))
      ((0= n) res)))

UtiLispならでは、っぽいところ

  1. map系の引数の順番が逆
  2. 0=は、zerop(zeropもある)
  3. 0>は、minusp、同様に0<はplusp
  4. (do (a b c) (t) )という書き方はNG。(do ((a) (b) (c) ) (t) )ならOK。
  5. ラムダリストでは、括弧で囲めば、オプショナル引数となり、デフォルト値の指定も可能
  6. error系が素朴でMacLISPっぽい。