2017-04-15 48 views
0

注:私は宿題のためにこれをやっています。私は自分の問題を解決するためのアルゴリズムを探しているわけではなく、Schemeの仕組みを理解しようとしています。Schemeのリストの中で最小の項目を返す

私は、リストに最小のアイテムを見つけるための小さなプログラムを作成しようとしています。プログラムは正解を見つけてから働いているので(ロジックがやや健全です)、私の答えを関数として扱い、呼び出すエラーが出てくるので、私はこれを知っています。

(DEFINE (startmin mylist) 
(

    (repeatmin (CAR mylist) (CDR mylist)) 


)) 


(DEFINE (repeatmin curmin mylist) 
(

    (IF (NULL? mylist) ;If the list is empty 

     ;This is where I'm at a loss. I want a way for this value to be 
     ;sent out once the list is empty 
     curmin ;return the current minimum 

     (IF (< curmin (CAR mylist)) ;if the current minimum is less than the head of the list 
      (repeatmin curmin (CDR mylist)) ;recurse with curmin 
      (repeatmin (CAR mylist) (CDR mylist)) ;otherwise recurse with the head of the list. 
     ) 
    ) 
)) 

私はそれを関数として値を扱うしようとし続けるように私は戻って再帰の外に、一度見つけ、値を取得する方法の損失で本当によ。

+0

[シルウォスターの答え](http://stackoverflow.com/a/43430528/7872323)私のためにそれを修正しました。 –

+1

質問に「[解決済み]」と表示されるべきではありません。 Sylwesterの答えを灰色のチェックマーク記号をクリックして受け入れると、質問のミニチュアは自動的に緑色にマークされます。 – suchtgott

答えて

2

あなたのかっこはオフです。あなたは

((if ...)) 

を記述する場合には、ifからの結果は、値がcmoputedされるとすぐに呼ばれるべき関数であることを意味しています。あなたがCでブロック{}のように括弧をブロックのように使用しているようですが、そうではありません。実際には(begin ...)はSchemeのブロックです。そしてもちろん機能、letcond用語は、このように

(define (func . args) 
    (begin 
    x 
    y)) 

はまた

(define (func . args) 
    x 
    y) 

くださいformat your code correctlyと同じ..です暗黙的に開始しています。字下げはコードとネスティングを読むのに役立ちます。私は本当に括弧に注意を払わず、重要な位置だけに注意します。これを行うエディタを選択してください。例えば。 DrRacketは私が使っている素敵なものです。

+0

ありがとうございました!それはそれを捨てていた余分な括弧のセットでした。私は教師がParensがクラスでどのように使用されているのかを説明していたときに私はちょっと寂しがっていたと思う。CのParensとCurly Bracesの両方と同じになるようにした。私はそのスタイルガイドを見て、今。 もう一度、ありがとうございます。 –

+1

@ChristopherMayerよろしくお願いします。私は他の言語を知っているとSchemeを学ぶのが難しくなると思いますが、それは素晴らしい言葉です。あなたが異なった考え方を学ぶので、あなたが知っている他の言語でも良くなるかもしれません。この回答が役に立った場合は、[回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を検討してください。 – Sylwester

関連する問題