人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

schemeの条件分岐(if)の書き方についての質問です。
(if (or (= e 1) (> d f))
(display 【素因数が入っているリスト名】)
(if (= 0 (modulo e d))
((cons d 【素因数が入っているリスト名】)
(【この関数】 d (/ e d) f))
(【この関数】 (+ d 1) e f))))
scheme(Racket)で素因数分解をするプログラムを作っています。この関数はその一部で2、3、4・・・で割り算を繰り返すというものです。
しかし実行すると
if: bad syntax;
has 4 parts after keyword in:(上に載せたコード)
というエラーが出てしまいます。
自分ではいくら見てみても上記のコードのどこが文法的におかしいのかが分からないので、教えてください。

●質問者: 匿名質問者
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 匿名回答1号

この質問では明確な回答をすることが出来ません。
こういった質問をする場合には、実際にエラーを発現するコードを貼ってください。 直接的にエラーである箇所を処理系は報告しますが、前提となる考え方が間違っている場合などには他の部分に要因がある可能性もあります。 自分が原因を特定できないでいるのに、自分で情報を取捨選択するべきではありません。


質問者から

これがエラーの出るコードです。(注釈に変換されてしまうので、ここに載せるときに5行目の括弧は全角にしています)
(define primefactor '(1))
(define (division d e f)
(if (or (= e 1) (> d f)) (cons f primefactor)
(if (= 0 (modulo e d))
((cons d primefactor)(division d (/ e d) f))
(division (+ d 1) e f))))
(division 2 24 24)


2 ● 匿名回答2号
ベストアンサー

then_value のところで begin がないからエラーになってるんじゃないでしょうか。


匿名質問者さんのコメント
ありがとうございます。 beginを入れても上記のコードは同じエラーが出ましたが、ifを全てcondに書き換えたコードはエラーが出なくなりました。

匿名回答2号さんのコメント
>> beginを入れても上記のコードは同じエラーが出ましたが << begin を入れる場所がおかしいんでしょう。 以下の行は、文法的に明らかにおかしいです。 >|| (if (= 0 (modulo e d)) ((cons d primefactor)(division d (/ e d) f)) ... ||< 以下のようにすべきです。 >|| (if (= 0 (modulo e d)) (begin (cons d primefactor) (division d (/ e d) f)) ... ||<

匿名質問者さんのコメント
(define primefactor '(1)) (define (division d e f) (if (or (= e 1) (> d f)) (cons f primefactor)? (if (= 0 (modulo e d)) (begin (cons d primefactor) (division d (/ e d) f)) (division (+ d 1) e f)))) (division 2 2 2) 教えていただいたコードでも同じエラーが出ます…

匿名回答2号さんのコメント
(cons f primefactor) の後に変な文字が入ってるので、そのせいではないですか。

匿名質問者さんのコメント
ありがとうございます。 気づきませんでした。

匿名回答2号さんのコメント
この手の質問は匿名質問ではなく通常の質問にした方が良いと思います。 ID が晒されると回答者の回答履歴も分かりますから、変なちゃちゃが入っても知っている人が書いているのかどうか、すぐに分かります。 回答者側から見ると、過去の質問履歴が見られますから、どの程度まで分かっている人なのかが分かりますから、回答のレベルを調整しやすいです。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ