私は再帰的なコードを持っており、条件が満たされたときに終了する必要があります。私は条件をリストに表示することができますが、次にスタックに別の呼び出しがあり、それを処理する必要はないので、リストを返すことはできません。プログラムを早期に終了してリストを返す
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.apache.batik.transcoder.TranscoderException:nullファイルの早期終了
- 5. CNNトレーニング早期終了
- 6. 早期終了「CNContactStoreEnumerateContactsHandler」列挙
- 7. コードの早期終了
- 8. SaxParserExceptionファイルの早期終了
- 9. org.mule.module.launcher.DeploymentInitException:SAXParseException:ファイルの早期終了
- 10. Rx.Observable.retryWhen /タイマの早期終了
- 11. Angular/JS予期せぬプログラムの早期終了
- 12. スレッドが早期に終了する
- 13. 新しいキューランナーを追加するとプログラムが早期に終了する
- 14. ノードJS早すぎるプログラムの終了
- 15. ブラウザへの接続を早期に終了し、応答ステータスを返す
- 16. AxisFault SAXParseException;ファイルの早期終了
- 17. Gulp Watchタスクの早期終了
- 18. ExpressJSの早期終了依頼
- 19. ゴランウォークの早期終了方法は?
- 20. python3コンテキストマネージャー早期終了強制
- 21. プログラムの終了時に値を返す
- 22. for bashのループがエラーなしで早期に終了する
- 23. プロセスはSIGSEGVシグナルで早期に終了します
- 24. backupcエラー:子が早期に終了しました
- 25. オープンとタグRSSでタグの不一致&データの早期の終了を終了
- 26. プログラムは早めに終了するようです。
- 27. scanfはループを早期終了させます
- 28. TransformerException:ファイルの早期終了エラーが発生しました
- 29. テキスト自動スクロールdivが早期に終了する
- 30. VBAネストされたループが早期に終了する
説明はあまり明確ではありません。いくつかのコードを記入し、あなたが解決している問題を記述してください。 – molbdnilo