アカウント名:
パスワード:
君が ruby しか知らないことは良くわかった。
元ACだが、俺が最近使っているのは、SchemeとC++。以前にObjective-Cで遊んだこともある。でも、Rubyは知らない。
ただ、リンク先を読むと、セマンティクスはRuby寄りとあるし、文字列の操作も気持ち悪い(見慣れていない)ので、Rubyが元なんだなと思いました。それで、そのthenとかelseとかもRuby由来かと思ったんだけど、違うの?
Schemeのifは
(if <test> <consequent> <alternate>)
だけど、thenとelseを使いたいのなら、
(if <test> then <consequent> else <alternate>)
で良い
thenとelseが関数で実装されてんのかな。んなばかな。
実際はどうなのか知らないが、
(if <test> (then <consequent>) (else <alternate>))
ならば、
(if <test> (then <consequent>))
(if <test> (else <alternate>))
も簡単に実装可能なのでは?
だと、
(if <test> then <consequent>)
も
(if <test> else <alternate>)
(if <condition> <consequent>)
では、
(if <condition> <alternate>)
をどうするの?キーワードなしには実装できないでしょ。
(if <condition> <block>...)
のほうがすっきり。
(case <condition> <block>...)
とかも同じ理屈で実装できるのでは?
<condition>が真のときにどのような値を返すかをお考えください。手続き型の言語とは違い、何らかの値を返さないといけないわけですから、キーワードの代わりに何らかの値を書けばいいのです。
キーワードを使うか、括弧を使うかは宗教の問題。私は、省けるキーワードは省きたいし、余計な記号も使いたくないので、Schemeが好きですが、キーワードや多種多様の記号を多用する言語を批判するつもりはありません。宗教ですから。
ただ、キーワードや多種多様の記号を使うのは、Schemeのように括弧だらけになるのを防ぐには良い手立てなのに、そこでまた、括弧をつけるというのが意味不明なのです。
> <condition>が真のときにどのような値を返すかをお考えください。>手続き型の言語とは違い、何らかの値を返さないといけないわけですから、>キーワードの代わりに何らかの値を書けばいいのです。
意味不明。
(if <condition> <consequent>)<condition>がtrueならば、<consequent>を評価する。
(if <condition> <alternate>)<condition>がfalseならば、<consequent>を評価する。
これらをどうやって区別するかの問題だよ。なんの話をしているの?「何らかの値」って何?どこに書くの?
だいたい、
(if condition alternate)
なんていらんだろう。
(if (not condition) (alternate))
で書ける。
それを言うなら、
(if <condition> <consequent> <alternate>)
も要らない。
おまえとはいっしょにコード書きたくない。コードメンテナンスとか、コード可読性とか考えてないよな。
IF文は、
IF <condition> GOTO <line number>
しか使えないBASICを思い出すよ :-p
unless でいいような。
>>キーワードの代わりに何らかの値を書けばいいのです。>意味不明。
Lisper 的には意味不明でもない。ALGOL的な if の条件式じゃなくてcond の条件節みたいなものを想定してるんじゃないかな。
(cond ((a-cond-func)) (t 'else-value))
こうすれば、a-cond-func 関数の呼出し結果が真値であれば、そのままその値が cond の返り値になる。
cond式でいいじゃんかー
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
Lispと言うよりRubyでは (スコア:0)
thenとelseって、何なのさ。それを使うことで可読性が増すかもしれないけど、わざわざ括弧で囲う必要はないし、括弧で囲うなら冗長なだけ。
Re:Lispと言うよりRubyでは (スコア:0)
君が ruby しか知らないことは良くわかった。
Re: (スコア:0)
元ACだが、俺が最近使っているのは、SchemeとC++。以前にObjective-Cで遊んだこともある。でも、Rubyは知らない。
ただ、リンク先を読むと、セマンティクスはRuby寄りとあるし、文字列の操作も気持ち悪い(見慣れていない)ので、Rubyが元なんだなと思いました。それで、そのthenとかelseとかもRuby由来かと思ったんだけど、違うの?
Schemeのifは
だけど、thenとelseを使いたいのなら、
で良い
Re: (スコア:0)
thenとelseが関数で実装されてんのかな。んなばかな。
Re: (スコア:0)
式の途中にキーワードを書くのは筋が悪い。
Common Lisp派ならまだしも、Scheme派でこれはちょっとねえ。
Re: (スコア:0)
実際はどうなのか知らないが、
ならば、
も簡単に実装可能なのでは?
だと、
も
Re: (スコア:0)
括弧とキーワードの両方を使う理由が分からんだけですよ。
Re: (スコア:0)
ますます筋が悪い
Re: (スコア:0)
では、
をどうするの?
キーワードなしには実装できないでしょ。
のほうがすっきり。
とかも同じ理屈で実装できるのでは?
Re: (スコア:0)
<condition>が真のときにどのような値を返すかをお考えください。手続き型の言語とは違い、何らかの値を返さないといけないわけですから、キーワードの代わりに何らかの値を書けばいいのです。
キーワードを使うか、括弧を使うかは宗教の問題。私は、省けるキーワードは省きたいし、余計な記号も使いたくないので、Schemeが好きですが、キーワードや多種多様の記号を多用する言語を批判するつもりはありません。宗教ですから。
ただ、キーワードや多種多様の記号を使うのは、Schemeのように括弧だらけになるのを防ぐには良い手立てなのに、そこでまた、括弧をつけるというのが意味不明なのです。
Re: (スコア:0)
式の途中にキーワードを入れるのはLispっぽくないんだよ
だから筋が悪いと何度も言ってるんだ
Re: (スコア:0)
> <condition>が真のときにどのような値を返すかをお考えください。
>手続き型の言語とは違い、何らかの値を返さないといけないわけですから、
>キーワードの代わりに何らかの値を書けばいいのです。
意味不明。
これらをどうやって区別するかの問題だよ。なんの話をしているの?
「何らかの値」って何?どこに書くの?
Re: (スコア:0)
だいたい、
(if condition alternate)
なんていらんだろう。
(if (not condition) (alternate))
で書ける。
Re: (スコア:0)
それを言うなら、
も要らない。
おまえとはいっしょにコード書きたくない。コードメンテナンスとか、コード可読性とか考えてないよな。
IF文は、
しか使えないBASICを思い出すよ :-p
Re: (スコア:0)
が使えないとヤダヤダ
Re: (スコア:0)
unless でいいような。
Re: (スコア:0)
>>キーワードの代わりに何らかの値を書けばいいのです。
>意味不明。
Lisper 的には意味不明でもない。
ALGOL的な if の条件式じゃなくてcond の条件節みたいなものを想定してるんじゃないかな。
こうすれば、a-cond-func 関数の呼出し結果が真値であれば、そのままその値が cond の返り値になる。
Re: (スコア:0)
ifで評価するのはbooleanなんだから、tだろうがthenだろうが大差ない。
読みやすさから言えば、elseがあるなら、thenのほうが分かりやすいんじゃないのか?
ということ。そこに「なんらかの値」なんて入る余地はないと思うのだが。
まあ読んでからにしてくれ!
http://programming.nu/operators#controlflow
ついでに言うと、untilもあるし。
みんな、読まずに勝手な想像だけで話していることがよく分かったよ。
Re: (スコア:0)
cond式でいいじゃんかー