2016-10-07 8 views
-2

これは私の最初の投稿であり、私の間違いを許してください。LISP:再帰関数に(Print)または(Format t)関数を使用せずにコンソールに出力する方法

私の質問は上記のタイトルです。(print ..)や(Format T)を使わずに、再帰関数の最後にLISP(私はCLISPを使用しています)のコンソールにデータを出力する方法はありますか? 。) 機能?これは、defun、cond、car、cdr、cons、append、list、and not、または<、>、< =、> =、=、eqという関数を使用することのみが許可されている練習です。新しいリストを作成する再帰関数を作成しましたが、そのリストを出力することはできますが、再帰関数をそのようなプリント関数の中にラップする場合に限ります。 as(print(myRecFunction))です。これは運動の基準を満たさないため、間違っていると考えられます。この関数をprint関数のまわりにラップしないと、コンソールは空白行に過ぎません。

誰かが、呼び出されている関数から出力されているリストの単純な例を提供できるかどうかを調べたいと思っています(再帰的にする必要はありません)。これがあまりにも漠然としている場合は、もっと情報が必要な場合はお詫び申し上げます。

+1

大歓迎ですので、既に試したコードを含めると便利です。 – FishStix

+1

Read-Eval-Printループは通常、あなたが入力したものの値を出力します。自分で '(print)'を使う必要はありません。 – Barmar

+2

'PRINx'または' FORMAT'関数のいずれかを使用せずに印刷する方法はありません。運動は意味をなさない。通常、関数は独自の印刷を行わず、値を返すだけで、呼び出し側はそれが必要な場合に印刷します。 – Barmar

答えて

1

REPL(Read Eval Print Loop)はトップレベルの結果を出力するので、再帰関数が出力する値を返すことを確認してください。 。今、すべての私のLispの実装は両方の式の結果を印刷

> (defun magic-string (times string) 
    (if (= 0 times) 
     string 
     (magic-string (1- times) (concatenate 'string string (reverse string))))) 
magic-string 
> (magic-string 3 "test") 
"testtsettesttsettesttsettesttset" 
> 

:ここ

は回文を作る機能です。あなたはしないでください?

関連する問題