Skip to content
2010/08/07 / highmt

forthでminを書いてみる

http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Conditional-execution-Tutorial.html#Conditional-execution-Tutorial

 : min ( n1 n2 -- n )
       2dup < if
         drop
       else
         nip
       endif ;

Assignment: Write min without else-part (hint: what’s the definition of nip?).

こうかな?:

: min
  2dup >
  if     swap
  endif
  drop ;

 

http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Flags-and-Comparisons-Tutorial.html#Flags-and-Comparisons-Tutorial

Assignment: Write min without if.

こうかなー? なんか題意と違う気がするー:

: min
  2dup < negate pick nip nip ;

最初、最後の nip nip を 2nipにしていたけど、それだとスタックに3つ以上入っているとうまく動かない。
2nipは、

1 2 3 4 2nip → 3 4

だから。でも、gforthで動かすと

1 2 3 2nip → 3

なんだよね…。エラーにならないのかな。

広告
%d人のブロガーが「いいね」をつけました。