私は "ステップ"評価を行う方法を見つけようとしています。関数を呼び出すと、共通のlispの最もネストされたリストが評価されます。例えばステップEval Common Lisp
:
'(+ 2 (+ 3 4))
; would eval to:
'(+ 2 7)
がその例ではそれだけで+ 4 3を評価し、右が停止。通常はLISPのように2 + 7の評価を続けることはできませんでした。
したがって、コードを最もネストされたリストを見つけて、リスト全体を評価することなく、最もネストされたリストを評価するようにします。例えば
:
'(+ 2 3 4 5 (+ 4 5 (- 5 6) 1 (+ 10 8 5 (- 10 11))) 10 7)
それは、ほとんどのネストされたリストを見つける(- 10 11)
、およびので、それをevalします:
'(+ 2 3 4 5 (+ 4 5 (- 5 6) 1 (+ 10 8 5 -1)) 10 7)
を再び、それは一度だけ評価し、でリスト全体を評価しません。一度。
最もネストされたリストのステップ評価を行う方法について、誰も知っていますか? evalなどを使用してリストの中で最も入れ子になった部分を実行するにはeval
リスト全体を一度に実行する必要はありませんか?私が抱えている問題は、最もネストされたリストをどのように評価してから戻すのか分かりません。私はこれに近づく方法を知らない。マスター・リスパーがこれをどうやって行うのか教えてください。
式はネストされたリストです。このネストされたリストを歩いて、*端末*リストの場合はevalを呼び出します。最初に、関数でネストされたリストをトラバースする方法を学ぶ必要があります。 –
最もネストされた部分に到達できる関数を書くことができましたが、どのように戻して戻すのか分かりません。たぶん私はこの間違ったことや何かを視覚化しているだけかもしれない。 – Loon911