私は再帰的なコードを持っており、条件が満たされたときに終了する必要があります。私は条件をリストに表示することができますが、次にスタックに別の呼び出しがあり、それを処理する必要はないので、リストを返すことはできません。プログラムを早期に終了してリストを返す
0
A
答えて
1
Sylwesterのソリューションのバリエーション:この方法で継続を使用
(define (example n)
(call-with-current-continuation
(lambda (return)
(let loop ([n 0])
(if (= n 5) ; done
(return 'the-result)
(loop (+ n 1)))))))
(example 10)
は、あなたの実装が持っている場合は、1つは(call/ec
とエスケープ継続の代わりに、完全な継続を使用することができますエスケープ継続)。
+0
ありがとう!それはまさに私が必要なものです! –
+0
キャンセルを継続するのを待つことなく、ここで 'call/cc'を使用する理由はわかりません。ただ「結果」がその仕事をしただけです。 – Sylwester
1
アキュムレータを使用することをお勧めします。中止は再帰的ではありません。
(define (copy-unless-contains-5 lst)
(define (helper lst acc)
(cond
((null? lst) (reverse acc))
((equal? (car lst) 5) #f)
(else (helper (cdr lst) (cons (car lst) acc)))))
(helper lst '()))
あなたが継続して再帰的にされており、それはそれを行うための最適な方法であれば、call-with-current-continuation
はあなたの継続を待って中止する方法を提供して返すために何を選択することができます。
(define (copy-unless-contains-5 lst)
(call-with-current-continuation
(lambda (abort)
(define (helper lst)
(cond
((null? lst) '())
((equal? (car lst) 5) (abort #f))
(else (cons (car lst) (helper (cdr lst))))))
(helper lst))))
言うまでもなく、この最後のバージョンはあまりにも複雑です。どちらも、同じように機能:
(copy-unless-contains-5 '(1 2 3 4)) ; ==> (1 2 3 4)
(copy-unless-contains-5 '(1 2 5 3 4)) ; ==> #f
関連する問題
- 1. 早期終了パーセプトロントレーニング
- 2. NodeJSが早期に終了します
- 3. Webリクエストを早期に終了する
- 4. org.mule.module.launcher.DeploymentInitException:SAXParseException:ファイルの早期終了
- 5. 早期終了「CNContactStoreEnumerateContactsHandler」列挙
- 6. SaxParserExceptionファイルの早期終了
- 7. Rx.Observable.retryWhen /タイマの早期終了
- 8. Angular/JS予期せぬプログラムの早期終了
- 9. ブラウザへの接続を早期に終了し、応答ステータスを返す
- 10. ノードJS早すぎるプログラムの終了
- 11. ゴランウォークの早期終了方法は?
- 12. Gulp Watchタスクの早期終了
- 13. AxisFault SAXParseException;ファイルの早期終了
- 14. python3コンテキストマネージャー早期終了強制
- 15. プログラムの終了時に値を返す
- 16. for bashのループがエラーなしで早期に終了する
- 17. backupcエラー:子が早期に終了しました
- 18. オープンとタグRSSでタグの不一致&データの早期の終了を終了
- 19. プログラムは早めに終了するようです。
- 20. scanfはループを早期終了させます
- 21. VBAネストされたループが早期に終了する
- 22. テキスト自動スクロールdivが早期に終了する
- 23. プログラムが予期せず終了する
- 24. Golangルーチンは早く終了します
- 25. 整数の値を設定した後、プログラムが早く終了する
- 26. 終了コード10で終了したプログラム
- 27. XCodeボットエラー:早期の予期せぬ終了、操作が完了していないブートストラップ -
- 28. コードをスキップしてプログラムを終了
- 29. 早いPythonでループを終了
- 30. Ruby:分割:正規表現の早期終了
説明はあまり明確ではありません。いくつかのコードを記入し、あなたが解決している問題を記述してください。 – molbdnilo