Prologでまったり Part3at TECH
Prologでまったり Part3 - 暇つぶし2ch251:デフォルトの名無しさん
08/06/16 05:36:33
Ubuntu7.1 で
Progol4_4 をmakeするとエラーに
なるのですが、なにかご存知の方、
コメントをください。 
# sudo sh expand.sh
・・・解凍して展開・・・
gcc -O2 -c -o command.o command.c
command.c: In function 'c_interp':
command.c:55: error: 代入として無効な左辺値です
とメッセージがでます。

252:デフォルトの名無しさん
08/06/16 06:53:04
command.c:55: error: 代入として無効な左辺値だってことがなぜ伝わらないのか

253:デフォルトの名無しさん
08/06/16 07:07:11
>>252
それは、判るのですが、どうすればいいのでしょうか?

254:デフォルトの名無しさん
08/06/16 14:24:24
左辺値をキャストしちゃダメなんだそうで。
URLリンク(c-faq.com)
URLリンク(www.kouno.jp)
> キャスト は変換演算子であって、それは右辺値を生みだすと定義されている。
> 右辺値であるとするなら、代入することも++で足し算することもでき ないことになる
> (pccから派生したコンパイラやgccの拡張機能が上の ような式を受け付けることは例外である)。

書き直す(左辺値用のマクロを用意する?)のが正しいと思うけれど、
gccのオプションをいじればどうにかなるのかも、なんて思ったりして。

255:デフォルトの名無しさん
08/06/16 14:28:15
いや、なんか適当にポインタを取ったりすればいいのかもしれない。適当。

256:デフォルトの名無しさん
08/06/16 16:01:28
しったかぶってただけでしたw

257:デフォルトの名無しさん
08/06/16 17:02:57
>>251
URLリンク(gcc.gnu.org)
この人の場合、どうやら古いgccでコンパイルしなおしたらしい。
pagaddedって何かわかんないけど

258:デフォルトの名無しさん
08/06/16 17:45:24
そんなことも知らないと見下されてるわけか。バカにされたもんだな。
そういうことを聞いてるんじゃないってことがなぜ伝わらないのか。
情報があるなら教えて欲しい、それだけだ。

259:デフォルトの名無しさん
08/06/16 17:54:17
> By the way, I'm running the latest version of gcc on a Sunblade 100 workstation.

だからpkgadd(ed)、かな

260:デフォルトの名無しさん
08/06/16 20:42:27
command.c
> CTYPE(cclause)=pdot0;

progol.h
> typedef int BOOL, INT;
> typedef long int LONG;
> typedef double DOUBLE;
> typedef char *STRING;
> typedef char *POINTER;
:
> #define I_GET(i) ((i)->obj)
:
> #define CTYPE(c) ((LONG)I_GET(F_ELEM(2l,(c))))
:
> struct item {
:
> POINTER obj;

世の中間違ってる

261:デフォルトの名無しさん
08/06/16 20:51:16
> #define CTYPE(c) ((LONG)I_GET(F_ELEM(2l,(c))))

#define CTYPE(c) (*(LONG *)&I_GET(F_ELEM(2l,(c))))

こんなんできたっけ

262:デフォルトの名無しさん
08/06/16 21:50:26
            普通      まったり  超まったり dat落ち寸前
             ┝ - - - - ┿━━┿━━━┥
   ∩___∩   /)

263:デフォルトの名無しさん
08/06/16 23:26:45
>>262
2ちゃんに「普通」なんつー概念はありえねーw

264:デフォルトの名無しさん
08/06/16 23:32:25
自分以外を「2chでスレ荒らし」と言ってる奴だから、対話は成立しないだろ。ほっとけ。

265:デフォルトの名無しさん
08/06/17 01:23:04
Prologって何の問題を解くのに向いているのでしょう?
手続き的な処理には不向きな気がします。
私はこのスレを読んでシステムの用件定義時に個別の用件の妥当性
をチェックするなどに使えるかな?と思っています。
ミナサンはどんな問題を解くのに使われていますか?

ちなみに、Javaや.Netなどから呼び出せたりするPrologってありませんか?

266:デフォルトの名無しさん
08/06/17 01:50:23
URLリンク(kaminari.scitec.kobe-u.ac.jp)
URLリンク(www.cs.kuleuven.ac.be)

267:デフォルトの名無しさん
08/06/17 02:18:30
>>264
何か誤解されているようですが。

268:デフォルトの名無しさん
08/06/17 02:48:04
P# というのもあります。
URLリンク(homepages.inf.ed.ac.uk)
Prolog から C# へのトランスレータということになります。
>>266 にでてくる PrologCafe で書かれています。

269:251
08/06/17 02:59:52
皆さんの示唆によりまして、
めでたく、Progolの起動まで漕ぎ着けました。
ひとまず、ありがとうございます。
ひとまずというのは、
>>261 はその通り直したのですが、同様にエラーのでた
(LONG) を「なんか適当にポインタを取ったり」という感じで
コメントアウトしてしまったらうまく行った、ということです。
それでは、問題があるかもしれないから、今日
(LONG)を生かす方法を試みます。


270:デフォルトの名無しさん
08/06/17 03:38:51
>>265
Prologの手続的解釈というのもあります。あくまで、Prologをどう読むかということですが。
プログラマが副作用に着目している以上、深さ優先探索を「悪用」して、
あーやって、つぎにこうやって、という具合に読んでいくことは現実味があります。
関数型ではPrologから影響を受けたErlangが似た構文を持っています。


271:デフォルトの名無しさん
08/06/17 04:37:35
>>261です

URLリンク(piza.2ch.net)
>1 名前: 厨房エログラマ 投稿日: 2000/09/12(火) 11:54
> unsigned long a = 0xcccccccc;
> (unsigned char)a = 0xff;
> このようなコードをみました。
> VC++で試したところ、拡張子CPPではエラーになりましたが、
> 拡張子Cでは問題なく通り、aの値は 0xccccccff になりました。
> この代入はC言語の規則上では正しいのでしょうか?

>10 名前: >8 投稿日: 2000/09/13(水) 08:15
> ANSIでは(unsigned char)aは左辺値じゃないから代入文の左辺に
> は置けない。これはANSIでは「処理系依存」ではない。

> この記述ができるコンパイラはANSIに従っていない。このため
> VC6も-ZaでこのMS拡張仕様を無効にする手段を用意している。

> gccではコンパイルできるが結果は0xccccccffでなく
> 0x000000ffになる。同様に-ansi -pedanticをつけて厳格に
> ANSIに準拠させるとエラーとなる。

> 言語仕様を(暗記せよとはいわないが)調べるぐらいしたら

sizeof(LONG) == sizeof(POINTER)
という仮定がされている、という仮定をしてしまった気がするとです


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch