2009-07-16(木)
ClojureのcondをSchemeでも使いたい
30分プログラム、その621。ClojureのcondをSchemeでも使いたい。
ClojureのCondは余計な括弧を省略できるらしいです。
(define (f n) (cond (even? n) "this is even" (odd? n) "this is odd"))
括弧が本当に余計なのかどうかはよく分からないけれど、とりあえずマクロで実現しとこう。
使い方
(define (f n) (my-cond (even? n) "this is even" (odd? n) "this is odd"))
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; group.scm - ;; ;; Copyright(C) 2009 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2009/07/16 21:24:30 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (define (split-at xs n) (if (or (= n 0) (null? xs)) (values '() xs) (receive (ys zs) (split-at (cdr xs) (- n 1)) (values (cons (car xs) ys) zs)))) (define (group n xs) (if (null? xs) '() (receive (ys zs) (split-at xs n) (cons ys (group n zs))))) (define-macro (my-cond . xs) `(cond ,@(group 2 xs))) (define (f n) (my-cond (even? n) "this is even" (odd? n) "this is odd"))
参考
コメントを書く
camlspotter
2009/07/17 09:28
「え」
トラックバック - http://d.hatena.ne.jp/mzp/20090716/cond
リンク元
- 66 http://d.hatena.ne.jp/sumii/20090716/p1
- 22 http://www.google.co.jp/search?q=clojure+cond&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 14 http://wordprogress.org/archives/208
- 13 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=ダイクストラ法+gauche&btnG=検索&lr=
- 13 http://www.google.co.jp/url?sa=t&rct=j&q=clojure cond&source=web&cd=3&ved=0CDIQFjAC&url=http://d.hatena.ne.jp/mzp/20090716/cond&ei=sqeiTo7oGOGEmQWS_9SfCQ&usg=AFQjCNH3VaV3-DHd3g-3OYmCK0z3i_Tmyg&sig2=nbI6Fy909nSXSbLo_nd6Jw&cad=rja
- 9 http://d.hatena.ne.jp/camlspotter/20090716/1247718623
- 8 http://mzp.sakura.ne.jp/wiki/
- 6 http://blogsearch.google.co.jp/blogsearch?hl=ja&ie=UTF-8&q=Clojure+はてな&btnG=ブログ検索&lr=lang_ja
- 6 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=clojure+cond
- 6 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GZEZ_jaJP263JP264&q=7 孤独
