2009/05/20

[scheme][2ch]10 times print "hello"

WS0800

10 times print "hello

10回"hello"と表示するプログラムについて2chのスレで話題になっていたのがおもしろかったので。
私はよく寝る前にimonaとかでム板とかマ板とかのぞいてます。主にLispとかScheme関連のスレとあとはC#やF#など。

do

手続き型の言語に染まっていれば最もストレートなコードではないでしょうか。
;; do
(do ((i 0 (+ i 1)))
    ((= i 10))
  (print "hello"))

 

let loop

これもまぁdoとあまり変わりませんね。
;; let loop
(let loop ((s 0))
           (if (< s 10)
               (begin
                 (print "hello")
                        (loop (+ 1 s)))))


for-each

これは結構schemeらしいと思います。Scheme的には一番ストレートでは?
;; for-each
(use srfi-1)
(for-each
(lambda (i)
   (print "hello"))
(iota 10))

 

recursive lambda

これもSchemeらしいですね(笑)Y Combinatorを思い出しますね。
;; recursive lambda
((lambda (f)
   (f f 10))
(lambda (f n)
   (cond
    ((< 0 n)
     (print "hello")
     (f f (- n 1))))))

 

参考

0 件のコメント:

コメントを投稿