[#42503] floatの値がずれる — Sato Hiroshi <hirocy.f01@...>

hirocyと申します.

33 messages 2006/07/04
[#42504] Re: floatの値がずれる — rubikitch <rubikitch@...> 2006/07/04

From: Sato Hiroshi <hirocy.f01@plala.to>

[#42505] Re: floatの値がずれる — Sato Hiroshi <hirocy.f01@...> 2006/07/04

hirocyです.るびきちさん,ありがとうございます.

[#42569] JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...>

こんばんは。

19 messages 2006/07/11
[#42570] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Yukihiro Matsumoto <matz@...> 2006/07/11

まつもと ゆきひろです

[#42572] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...> 2006/07/11

In message <1152619872.835566.21152.nullmailer@x31.priv.netlab.jp>

[#42575] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Yukihiro Matsumoto <matz@...> 2006/07/11

まつもと ゆきひろです

[ruby-list:42596] callcc (Ruby vs Scheme)

From: rubikitch <rubikitch@...>
Date: 2006-07-26 09:16:36 UTC
List: ruby-list #42596
るびきちです。

Schemeのcall-with-current-continuationをRubyで試そうとしていますが、
うまくいきません。


 (define list-length
   (lambda (obj)
     (call-with-current-continuation
      (lambda (return)
        (letrec ((r
                  (lambda (obj)
                    (cond ((null? obj) 0)
                          ((pair? obj)
                           (+ (r (cdr obj)) 1))
                          (else (return #f))))))
          (r obj))))))
     
(list-length '(1 2 3 4))            =>  4
     
(list-length '(a b . c))            =>  #f


これをRubyで試そうにも二番目のテストがfalseを返してくれません。
どこか問題があるのでしょうか?

require 'test/unit'
def pair?(x)
  Array === x
end

def null?(x)
  x == []
end

def cdr(x)
  x[1]
end


def list_length(obj)
  callcc do |_return|
    r = lambda{|obj_|
      if null?(obj_)
        0
      elsif pair?(obj_)
        r[cdr(obj_)] + 1
      else
        puts "end"
        _return.call[false]
      end
    }
    r[obj]
  end
end

class TestCallCc < Test::Unit::TestCase
  def test_callcc
    assert_equal 4, list_length([1,[2,[3,[4,[]]]]])
    # "end"は出力されるがnilを返してしまう
    assert_equal false, list_length([:a,[:b,:c]]) 
  end
end

--
rubikitch
http://www.rubyist.net/~rubikitch/

In This Thread

Prev Next