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-06-18

GOOでL-99 (P21 指定した位置に要素を挿入する)

| 17:39 | GOOでL-99 (P21 指定した位置に要素を挿入する) - わだばLisperになる を含むブックマーク はてなブックマーク - GOOでL-99 (P21 指定した位置に要素を挿入する) - わだばLisperになる

先週さぼったの2連続で…。前回と同じでmy-splitを使っています。文字列の扱いをどうしたら良いかと思いましたが、とりあえず印字表現をそのまま挿し込むことにしました。

(insert-at 'alpha '(a b c d) 2) ;=> (a alpha b c d)
(insert-at 'alpha #(a b c d) 2) ;=> #(a alpha b c d)
(insert-at 'alpha #[a b c d] 2) ;=> #[a alpha b c d]
(insert-at 'alpha "abcd" 2)     ;=> "aalphabcd"

(dg insert-at (item|<any> u|<seq> p|<int> => <seq>))

(dm insert-at (item|<any> u|<seq> p|<int> => <seq>)
  (def (tup x y) (my-split u (1- p)))
  (cat x (lst item) y))

(dm insert-at (item|<any> u|<str> p|<int> => <str>)
  (def (tup x y) (my-split u (1- p)))
  (cat x (to-str item) y))

GOOでL-99 (P20 指定した要素を削除)

| 17:39 | GOOでL-99 (P20 指定した要素を削除) - わだばLisperになる を含むブックマーク はてなブックマーク - GOOでL-99 (P20 指定した要素を削除) - わだばLisperになる

以前に定義したmy-splitを使っています。GOOで分割代入/束縛させたい場合、変数のところをタプルにすると分割して束縛されます。

(remove-at '(a b c d) 2) ;=> (a c d)
(remove-at #(a b c d) 2) ;=> #(a c d)  
(remove-at #[a b c d] 2) ;=> #[a c d]  
(remove-at "abcd" 2)     ;=> "acd"

(dg remove-at (u|<seq> p|<int> => <seq>))

(dm remove-at (u|<seq> p|<int> => <seq>)
  (def (tup x y) (my-split u (1- p)))
  (cat x (sub* y 1)))