Drkcore

14 05 2009 perl lisp Moose Moosp Tweet

MooseでLisp(MoospのFunction::Add)

やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。

REPLまで出来て

(+ 1 2)

は動くのに

(+ (+ 1 2) 3)

が動かなくて、evalの再帰が悪いのかと思ったら、Functionのほうだった。

sub fun {
  my ($self, $arguments) = @_;
  my $arg1;
  my $ret =  Moosp::Integer->new(value => 0);
  return $ret if ($arguments->isa('Moosp::Nil'));

  while (1) {
    $arg1 = $self->eval->eval($arguments->car);
    $ret = $ret->add($arg1);
    last if ($arguments->cdr->isa('Moosp::Nil'));
    $arguments = $arguments->cdr;
  }
  return $ret;
}

carがfunctionの場合はcdr部は全て評価済みにしておかないといけないんだった。

やっとうまく動いた

Moosp> (+ (+ 1 2) (+ 3 4))
10

tak実行が見えてきた。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021