L-99

L-99をCyanで その5

L-99: Ninety-Nine Lisp Problemsより。 P05 # named let def(List.reverse1)^: let(loop)^(&opt lst = self, acc): if(lst.null?()): acc else: loop(lst.cdr(), [lst.car() | acc]) # optional argument def(List.reverse2)^(&opt acc): if(.null?()): acc…

L-99をCyanで その4

L-99: Ninety-Nine Lisp Problemsより。 P04 def(List.number_of_elements1)^: if(.null?()): 0 else: 1 + .cdr().number_of_elements1() # foldlを使って def(List.number_of_elements2)^: .foldl(0)^(n, _): n + 1

L-99をCyanで その3

L-99: Ninety-Nine Lisp Problemsより。 P03 def(List.element_at)^(n): if(n == 1): .car() else: .cdr().element_at(n - 1)cyan> ('[a, b, c, d, e]).element_at(3) => c

L-99をCyanで その2

L-99: Ninety-Nine Lisp Problemsより、前回の続きです。 P02 def(List.my_but_last)^: if(.cdr().cdr().null?()): self else: .cdr().my_but_last()cyan> ('[a, b, c, d]).my_but_last() => [c, d]

L-99をCyanで その1

http://cadr.g.hatena.ne.jp/g000001/さん経由で見つけた、L-99: Ninety-Nine Lisp ProblemsというのをCyanでやってみたいと思います。 P01 def(List.my_last)^: if(.cdr().null?()): self else: .cdr().my_last()Listのメソッドとして定義してみました。 cy…