C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

二分探索木を用いたlispプログラム


(過去ログ 87 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■51641 / inTopicNo.1)  二分探索木を用いたlispプログラム
  
□投稿者/ もふ (7回)-(2010/07/13(Tue) 11:24:34)

分類:[その他の言語] 

お世話になっております。
また質問させていただきます。
Allegro Common lisp 8.0を使っています。

lispで二分探索木に新しいデータを追加するプログラムを作っています。
二分探索木をリスト構造で(n (left-tree) (right-tree))というように表します。
データとして、以下のようなリスト構造による二分探索木を定義しておきます。
(setq tree '(8 
               (5 (2 nil nil) (7 nil nil))
               (15 nil nil)))
二分探索木に新しいデータを追加する関数tree-insert(n tree)を作ったのですが、うまく挿入されません。
(defun tree-insert (n tree)
  (let ((subtree tree))
    (loop
     (if (null subtree) (return)
       (if (> (car subtree) n) (setq subtree (second subtree))
	 (setq subtree (third subtree)))))
    (setf subtree n)
    (print tree)))
考え方は、各節でデータを比較ながら木を辿り、nilのところまで来たら、nilを新しいデータに書き換えるというものです。

(tree-insert 1 tree)というように実行しても、元のtreeがそのまま返ってきます。

どこが間違っているのでしょうか。
ご指摘お願いします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -