fork(1) download
  1. \ youtube.com/watch?v=Nscxt4MtoHo
  2.  
  3. : ex1 s" kitten" s" sitting" ;
  4. : ex2 s" rosettacode" s" raisethysword" ;
  5. : last ( au-c) 1- + c@ ;
  6.  
  7. \ // from mr. bezemer's video above.
  8. : leven1 ( auau-u)
  9. dup 0= if 2drop nip exit then 2>r
  10. dup 0= if 2drop 2r> nip exit then
  11. 2dup last 2r@ last = if
  12. 1- 2r> 1- recurse exit then
  13. 2dup 1- 2r@ 1- recurse -rot
  14. 2dup 2r@ 1- recurse -rot
  15. 1- 2r> recurse
  16. min min 1+ ;
  17.  
  18. \ uses the same amount of rstack
  19. \ but pstack use is fixed:
  20. : 1r ( -n) rp@ cell+ cell+ @ ;
  21. : r ( i-n) 1+ cells rp@ + @ ;
  22. : leven2 ( aauu-aau)
  23. dup 0= if drop exit then
  24. over 0= if nip exit then >r >r
  25. over r@ last over 1r last = if
  26. r> 1- r> 1- recurse exit then
  27. r@ 1- 1r 1- recurse >r
  28. 1r 2 r 1- recurse >r
  29. 2 r 1- 3 r recurse
  30. r> r> rdrop rdrop min min 1+ ;
  31. : leven2 ( auau-u) rot swap leven2 nip nip ;
  32.  
  33. \ uses a separate stack, necessary for
  34. \ a small system with shallow stacks.
  35. 999 cells allot here dup , value q
  36. : >q ( n-) [ -1 cells ]l q +! q @ ! ;
  37. : nqdrop ( u-) cells q +! ;
  38. : 0q ( -n) q @ @ ;
  39. : 1q ( -n) q @ cell+ @ ;
  40. : q ( i-n) cells q @ + @ ;
  41. : leven3 ( aauu-aau)
  42. dup 0= if drop exit then
  43. over 0= if nip exit then >q >q
  44. over 0q last over 1q last = if
  45. 0q 1- 1q 1- 2 nqdrop recurse exit then
  46. 0q 1- 1q 1- recurse >q
  47. 1q 2 q 1- recurse >q
  48. 2 q 1- 3 q recurse
  49. 0q 1q 4 nqdrop min min 1+ ;
  50. : leven3 ( auau-u) rot swap leven3 nip nip ;
  51.  
  52. : now ( -u) utime drop ;
  53. : t: ( '-) ' now >r execute now r> - swap . . ;
  54. cr ex1 t: leven1 ex1 t: leven2 ex1 t: leven3
  55. cr ( ex2 t: leven1 ) ex2 t: leven2 ( ex2 t: leven3 )
  56.  
Success #stdin #stdout #stderr 3.02s 5320KB
stdin
Standard input is empty
stdout
3 105 3 193 3 365 
8 3032506 
stderr
redefined Last with last  redefined leven2  redefined q  redefined leven3