Lisp Scheme Part17 ..
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
604:デフォルトの名無しさん 07/06/18 20:08:26 文字はリストやストリームとしていつでも取り出せるように蓄えとくと バックトラックとか副作用気にせずできて便利っすよ。 named-let活用したいみたいだしCPS勉強すると良いでしょう。 例えばトークン抽出時や#f返してる所は末尾コンテキストだから、 そのまま他の判定処理にたらい回しして継続できるし。 慣れればread-charとかのI/O操作は違うレイヤーとして管理できるよ。 605:デフォルトの名無しさん 07/06/18 21:37:01 今日初めてreaderマクロなるものとCL-YACCと言う物を体験しました。 惚れた、もっと昔に食わず嫌いしないでやっておけばよかった。 ちょいとのめり込み中。 606:デフォルトの名無しさん 07/06/20 20:12:56 リストから、n番目の要素を削除して、その削除した要素を返す関数を書きました。 まず下のような感じで書いたのですが、これだと、nが0の場合にエラーになります。 (define (remove-at! ls n) (let loop((prev '()) (rest ls) (count n)) (if (zero? count) (begin (set-cdr! prev (cdr rest)) (car rest)) (loop rest (cdr rest) (- count 1))))) それで、nが0の場合は別に処理を入れてみたのですが、破壊的操作で、リストの先頭を削除するのがどうしてもわかりません。 どう書けばいいでしょうか? (define (remove-at! ls n) (cond ((null? ls) '()) ((zero? n) (let ((tmp (car ls))) (set-cdr! ls (cdr ls)) ;; ここがダメ tmp)) (else (let loop((prev '()) (rest ls) (count n)) (if (zero? count) (begin (set-cdr! prev (cdr rest)) (car rest)) (loop rest (cdr rest) (- count 1)))))))
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5394日前に更新/220 KB
担当:undef