Hatena::Groupgeneration1986

最後に改行がないとコンパイルできない [suu-gの日記]

2008-03-12んー

Haskellは知らないので

| 02:44

["aaa","bbb","ccc","aaa"]というリストがあったときに"aaa"という入力より["aaa","aaa"]という出力を得たい、という感じ

http://twitter.com/syou6162/statuses/770298353

それLispで。


と思ったので、とりあえず書きました。Common Lisp

(defun element-in-tree (tree a)
  (cond
   ((null tree) nil)
   ((atom (car tree))
    (cond ((equal (car tree) a)
	   (cons a (element-in-tree (cdr tree) a)))
	  (t (element-in-tree (cdr tree) a))))
   (t (cons (element-in-tree (car tree) a)
	    (element-in-tree (cdr tree) a)))))

ツリーに対して、位置関係を把握したまま実行できます。


それだけじゃつまらないので、書いたことのない OCaml で書いてみた。

# let rec element lst atm = 
    match lst with
      [] -> []
    | a :: rest -> if a=atm then
  		    a :: element rest atm
  		else
  		    element rest atm;;

こっちが動作するのはリストに対してのみ。

なんだか変数名が胡散臭いし、OCamlらしいコードかどうかもとっても疑わしい。

けど、言語仕様を確かめたりする良い練習になったので、今夜のところはひとまずよし、かな。


ツッコミは常に大歓迎です。特にコードや考え方の不備を指摘されるととっても喜びます。

List.filter超便利

| 12:25

# let exp = fun lst atm ->
  	List.filter (fun a -> a = atm) lst;;

こ れ で 終 わ り ! !

一回しか使わないなら、 List.filter(fun a -> a = "hogehoge") だけでその関数の意味になる*1。(組み込みの)高階関数は超便利ですね、びっくりした。


ラムダ式かわいいよラムダ式

*1:その後、その関数にリストを適用する

hogeloghogelog2008/03/13 09:05filter ("aaa" ==) ["aaa", "bbb", "ccc", "aaa"]
「Haskellでは組み込みの関数を組み合わせて目的とする処理を成し遂げるのがKool!」ってばっちゃが言ってた。

OCamlだとList.filterがあるからやっぱそっち使うとか。

SchemerとかSICPとかやると組み込みの便利なほげほげを使うという発想が消えるという楽しさがあるね。

suu-gsuu-g2008/03/13 12:24ツッコミありがとう!
さっそくList.filterを使ってみたけど、組み込みの高階関数って本当に便利なのね。

syou6162syou61622008/03/13 12:32ふむふむ

hogeloghogelog2008/03/13 13:31個人的には、引数の順序はこうしたい気もする。
let exp atm lst = List.filter (fun a -> a = atm) lst;;
そしたら(exp "hogehoge")でatmだけ束縛して、簡単に「"hogehoge"と一致する要素だけとってくるフィルター」とか作れて良い気がした。lstだけ束縛した関数はあんまし使いどころ無さげな気するし。

suu-gsuu-g2008/03/13 20:17あ、なるほど、fun a b -> hoge っていうのは fun a -> fun b -> hoge の構文シュガーみたいなものなのか。
(いま手計算してみて、引数の順番が変わらないことにちょっと驚いた)
部分適用って非常にλで良いですね!

suztomosuztomo2008/03/14 00:35suu_gはcurry化を身に着けた。

hogeloghogelog2008/03/14 14:39まさしくシンタックス糖衣です。

JacobyJacoby2012/01/27 18:04Umm, are you rellay just giving this info out for nothing?

mfdndilgmfdndilg2012/02/01 00:36kV8vOV , [url=http://ccvwujowdagl.com/]ccvwujowdagl[/url], [link=http://degassodawgp.com/]degassodawgp[/link], http://zydtyyasleze.com/