約 443,741 件
https://w.atwiki.jp/fumi23question/pages/14.html
突然のトラブル OSがWindows、日本語入力ソフトがMS-IME。これが前提です。 MacやATOKは「よくある質問」ではないので掲載していません。 大文字入力になってしまった ローマ字入力がかな入力に変わった [Jま]キーで1が入力される、テンキーで数字が入力できない 記号、漢字入力 ─、│、┌、┐、┘、└、├、┬、┤、┴、┼、 ━、┃、┏、┓、┛、┗、┣、┳、┫、┻、╋、 ┠、┯、┨、┷、┿、┝、┰、┥、┸、╂ 丿 艸 分からない ○(漢字一文字)の読み方がわからない コピペって何?やり方もわからない 単語/顔文字を登録したい/登録したものを削除したい
https://w.atwiki.jp/elisp/pages/12.html
文字列リファレンス その他 文字列を比較する 文字列の長さを得る 文字列を結合する 繰り返し文字列を生成する 大文字・小文字に揃える 先頭だけを大文字にする(キャピタライズ) 大文字と小文字の入れ替え コマンドの実行結果を文字列に設定する 複数行の文字列を作成する ヒアドキュメントの終端文字列をインデントする 複数行のコマンドの実行結果を文字列に設定する 部分文字列を取り出す 部分文字列を置き換える 文字列を指定されたパターンで分割する 文字列中の式を評価し値を展開する 文字列中の環境変数を展開する 文字列を1文字ずつ処理する 文字列を1行ずつ処理する 文字列の先頭と末尾の空白文字を削除する 文字列を数値に変換する (to_i) 数値を文字列に変換する (to_s) 文字列を浮動小数点に変換する (to_f) 8進文字列を整数に変換する (oct) 16進文字列を整数に変換する (hex) ASCII文字をコード値に(コード値をASCII文字に)変換する 文字列を中央寄せ・左詰・右詰する "次"の文字列を取得する 文字列を暗号化する 文字列中で指定したパターンにマッチする部分を置換する 文字列中に含まれている任意文字列の位置を求める 文字列の末端の改行を削除する カンマ区切りの文字列を扱う 任意のパターンにマッチするものを全て抜き出す 漢字コードを変換する マルチバイト文字の数を数える マルチバイト文字列の最後の1文字を削除する printf整形 文字列 リファレンス GNU Emacs Lispリファレンスマニュアル 文字列と文字 Strings and Characters - GNU Emacs Lisp Reference Manual Formatting Strings - GNU Emacs Lisp Reference Manual その他 Emacs Lisp の文字列操作まとめ s.el (文字列操作用ライブラリ) 文字列を比較する string-equal,string=関数を使います。 string=はstring-equalの別名として定義されているので、どちらも同じ機能です。 (string= "abc" "abc") ;= t (string= "abc" "ABC") ;= nil (string= "AB" "ABC") ;= nil 大文字小文字の区別を考慮する場合はcompare-strings関数を使います。 (compare-strings "ABC" nil nil "abc" nil nil t) ;= t 文字列の長さを得る (length "abcdefg") ;= 7 (length "日本語") ;= 3 文字列を結合する concat関数を使います。 ; 普通に結合 (concat "abc" "-def") ;= "abc-def" (concat "私は" "美味しく食べました") ;= "私は美味しく食べました" ; nilは無視 (concat "abc" nil "-def") ; 引数なしの場合は空文字列を返す (concat) ;= "" mapconcat関数を使えば各文字列の間に区切り文字を挿入することが出来ます。 (mapconcat # identity ("Hello" "Emacs" "Lisp") "-") ;= "Hello-Emacs-Lisp" 繰り返し文字列を生成する 一文字だけの繰り返しならばmake-string関数が使えます。 (make-string 10 ?X) ;= "XXXXXXXXXX" 文字列の繰り返しならば、文字列のシーケンスを作ってそれを結合するのが良いでしょう。 (apply # concat (make-list 5 "Hello")) ;= "HelloHelloHelloHelloHello" (mapconcat # identity (make-vector 5 "Hello") ",") ;= "Hello,Hello,Hello,Hello,Hello" 大文字・小文字に揃える upcase, downcase関数を使います (upcase "The cat in the hat") ;= "THE CAT IN THE HAT" (downcase "THE CAT IN THE HAT") ;= "the cat in the hat" 先頭だけを大文字にする(キャピタライズ) 他の言語に余り無くて便利な機能として、キャピタライズ(先頭だけを大文字にする)があります。 ;; 一文字目を大文字に、残りは全て小文字にする (capitalize "The cat in the hat") ;= "The Cat In The Hat" (capitalize "THE 77TH-HATTED CAT") ;= "The 77th-Hatted Cat" ;; 一文字目を大文字に、残りは何もしない (upcase-initials "The cat in the hat") ;= "The Cat In The Hat" (upcase-initials "THE 77TH-HATTED CAT") ;= "THE 77TH-HATTED CAT" 大文字と小文字の入れ替え (require cl) (let ((case-fold-search nil)) (map string # (lambda (c) (if (char-equal (upcase c) c) (downcase c) (upcase c))) "i lOVE eMACS.")) ;= "I Love Emacs." コマンドの実行結果を文字列に設定する (shell-command-to-string "file -ib /bin/bash") ;= "application/x-executable\n" 複数行の文字列を作成する ヒアドキュメントの終端文字列をインデントする 複数行のコマンドの実行結果を文字列に設定する 部分文字列を取り出す (substring string START optional END) substring関数を使います。 startは先頭の添え字、endは終端の添え字を表します(endは含めずにコピーする)。 ; 0(a)から、3(d)なので"abc"を生成 (substring "abcdefg" 0 3) ;= "abc" ; 負の添え字は逆から数える (substring "abcdefg" -3 -1) ;= "ef" ; 第2引数は省略可能で、終端までコピーを表す (substring "abcdefg" 2) ;= "cdefg" ; 先頭に0を渡すと文字列のコピーと等価になる (substring "abcdefg" 0) ;= "abcdefg" 部分文字列を置き換える CLライブラリのsetfマクロとsubstring関数を使います。この場合は変数の中身が破壊されます。 (require cl) (setq s "Apple Banana Orange") (setf (substring s 0 5) "Vine") ;= "Vine" s ;= "Vine Banana Orange" 文字列を指定されたパターンで分割する Rubyのsplitとほぼ同じように使えます、第2引数に渡すのは正規表現です。 デフォルトでは空白文字を区切り文字として扱います。 (split-string STRING optional SEPARATORS OMIT-NULLS) (split-string "Soup is good food" "o") ;= ("S" "up is g" "" "d f" "" "d") (split-string "Soup is good food" "o+") ;= ("S" "up is g" "d f" "d") (split-string "Soup is good food") ;= ("Soup" "is" "good" "food") 文字列中の式を評価し値を展開する 文字列中の環境変数を展開する (substitute-in-file-name "LANG=${LANG}") ;= "LANG=ja_JP.UTF-8" 文字列を1文字ずつ処理する 色々な方法があると思いますが、map関数を利用すると以下のように書けます。 以下のサンプルはstr変数の内容を1文字ずつ、*Messages*バッファに出力します。 (require cl) (setq str "a b c d\n** ** ** *\n123\n456\n") (map nil (lambda (x) (message x)) (split-string str "")) ;= *Messages* ;a ; ;b ; ;c ; ;d ; [2 times] ;* [7 times] ; [2 times] ;1 ;2 ;3 ; [2 times] ;4 ;5 ;6 ; [2 times] 文字列を1行ずつ処理する 色々な方法があると思いますが、map関数を利用すると以下のように書けます。 以下のサンプルはstr変数の内容を1行ずつ、*Messages*バッファに出力します。 (setq str "a b c d\n** ** ** *\n123\n456\n") (map nil (lambda (x) (message x)) (split-string str "\n")) ;= *Messages* ;a b c d ;** ** ** * ;123 ;456 文字列の先頭と末尾の空白文字を削除する もうちょっといい方法無いかなー。 (car (split-string (car (cdr (split-string " abcd " "^ +"))) " +$")) ;= "abcd" ; 正規表現を使ってみる (replace-regexp-in-string "^\\s-+\\|\\s-+$" "" " \t abc def \t ") ;= "abc def" 文字列を数値に変換する (to_i) string-to-number関数を使います。基数を指定することもできます。 (string-to-number STRING optional BASE) (string-to-number "256") ;= 256 (string-to-number "256.0") ;= 256.0 (string-to-number "-256.5") ;= -256.5 ;; 基数を指定する (string-to-number "110") ;= 110 (string-to-number "110" 8) ;= 72 (#o110) (string-to-number "110" 16) ;= 272 (#x110) 数値を文字列に変換する (to_s) string-to-numberの逆の関数、number-to-string関数を使います。 (number-to-string 256) ;= "256" (number-to-string -256.0) ;= "-256.0" (number-to-string -256.5) ;= "-256.5" 文字列を浮動小数点に変換する (to_f) number-to-string関数は浮動小数にも使えます。 (string-to-number "10.1") ;= 10.1 8進文字列を整数に変換する (oct) 16進文字列を整数に変換する (hex) ASCII文字をコード値に(コード値をASCII文字に)変換する 文字列を中央寄せ・左詰・右詰する ;; 左詰め (format "%10s" "foo") ;= " foo" (format "%10d" 1234) ;= " 1234" ;; 右詰め (format "%-10s" "foo") ;= "foo " (format "%-10d" 1234) ;= "1234 " "次"の文字列を取得する 文字列を暗号化する 文字列中で指定したパターンにマッチする部分を置換する (replace-regexp-in-string REGEXP REP STRING optional FIXEDCASE LITERAL SUBEXP START) (setq s "Apple Banana Apple Orange") (replace-regexp-in-string "Apple" "Pine" s) ;= "Pine Banana Pine Orange" 文字列中に含まれている任意文字列の位置を求める (setq s "Apple Banana Apple Orange") (string-match "Apple" s) ;= 0 (string-match "Banana" s) ;= 6 文字列の末端の改行を削除する replace-regexp-in-string "\n+$" "" STRING) カンマ区切りの文字列を扱う (split-string "001,TAKEUCHI Hitoshi,Yokohama" ",") ;= ("001" "TAKEUCHI Hitoshi" "Yokohama") 任意のパターンにマッチするものを全て抜き出す 漢字コードを変換する ; エンコード (encode-coding-string "漢字です" sjis) (encode-coding-string "漢字です" euc-jp) (encode-coding-string "漢字です" utf-8) (encode-coding-string "漢字です" emacs-mule) ; デコード (decode-coding-string (encode-coding-string "漢字です" utf-8) utf-8) ;= "漢字です" マルチバイト文字の数を数える マルチバイト文字列の最後の1文字を削除する printf整形 (format "このバッファは %s." (buffer-name)) ;= "このバッファは *scratch*." ;整数 %d (format "%d" 100) ;= "100" ;浮動小数点その1 %f (format "%f" 100.0) ;= "100.000000" ;浮動小数点その2 %g できるだけ短くなる出力にする (format "%g" 100.00) ;= "100" (format "%g" 100.05) ;= "100.05" (format "%g" 1000000000000000) ;= "1e+015" (format "%g" 0.00000000000000000001) ;= "1e-020" ;ダブルクォートなどをエスケープして出力 (format "この文字列 %S のダブルクォートなどはエスケープされる" "test") ;= "この文字列 \"test\" のダブルクォートなどはエスケープされる" (format "この文字列 %S のダブルクォートなどはエスケープされる" "\"test\"") ;= "この文字列 \"\\\"test\\\"\" のダブルクォートなどはエスケープされる"
https://w.atwiki.jp/openmusic/pages/397.html
非公式チュートリアル11 文字および文字列のファンクション 2年ぶりの更新。 今回は文字および文字列の扱い方、およびそのファンクションを列挙してみる。リファレンスマニュアルに載っていないLISP由来のファンクションがたくさんあるので、是非ともご活用いただきたい。 OpenMusicで文字を扱う場合は、以下の3つに分けられる。 単一の文字からなる「文字 character (char)」 複数の文字からなる「文字列 string」 文字列をシンボルとみなす「シンボル symbol」 非公式Tutorial 04 omif subpatchで条件判断文によりevenとoddの文字を表示させたが、この時は「シンボル」という扱いであった。今回は「文字」と「文字列」を扱う。 単一の文字(半角英数字と記号)を扱うときには、 #\ の次に文字を書く。 a という文字を扱うなら #\a と書く。 複数の文字からなる文字列を扱うときには、文字列をダブルクォーテーションで囲む。ABCという文字列を扱うなら "ABC" と書く。 ダブルクォーテーションで囲まれていない文字列は、シンボルとして認識される。 シンボルとは、文字列のように扱えるが、予約語(LISPの命令としてすでに存在する単語)である場合、LISPの命令のように動く。例えば非公式チュートリアル4で出てきた evenp を使う場合、これをLISPのファンクション apply の左辺に入れると、 evenp のファンクションを繋いだのと同じ動きをする。 それに対して文字列は、その文字列の中のどれか1文字や一部の文字列を指定したり、文字列の評価(ABC順で前か後かなど)を行うことができる。 具体例はチュートリアルの次項で見ていくことにして、ここではまず最低限必要なファンクションを解説しよう。 名前がpで終わるファンクションは、評価のファンクションである。例えば非公式チュートリアル4でも evenp と oddp を扱った。これらの評価ファンクションは、omifに繋ぐことで、条件判断文として使うことができる。判断が真なら t を、偽なら nil を返す。 characterp 文字かどうかを判断する。 stringp 文字列かどうかを判断する。 arpha-char-p 文字がアルファベットかどうかを判断する。 alphanumericp 文字がアルファベットまたは数字かどうかを判断する。 code-char 数値を指定することで、そのアスキーコードに対応する文字を返す。 char-code 文字を指定することで、その文字に対応するアスキーコードを返す。 char= 左辺と右辺の文字が一致するかどうかを判断する。小文字と大文字を区別する。 char-equal 左辺と右辺の文字が一致するかどうかを判断する。小文字と大文字を区別しない。 lower-case 文字が小文字のアルファベットかどうかを判断する。 upper-case 文字が大文字のアルファベットかどうかを判断する。 aref, elt, char 文字列を左辺に指定した場合、いずれも右辺に指定した数値n番目の文字を返す。LISPは0からものを数えるので、先頭の文字は0となる。 length 今までのチュートリアルでも使ってきたファンクションだが、文字列を指定した場合、その長さを返す。 typep 左辺の入力が、右辺に指定されたタイプ(char, string, symbol)と一致するかどうかを判断する。 character 単一の文字を指定した場合、その文字を返す。 string 文字列を返す。ここで注意したいのは、単一の文字を指定しても、stringはそれを文字列として返す点である。つまり #\a をstringに指定すると、返り値は "a" となり、文字列とみなされる。 string= 左辺の文字列が右辺の文字列と一致するかどうかを判断する。小文字と大文字を区別する。 string-equal 左辺の文字列が右辺の文字列と一致するかどうかを判断する。小文字と大文字を区別しない。 string 左辺の文字列が右辺の文字列より小さいかどうかを判断する。左辺が大きい場合はnilを返す。左辺が小さい場合、一致する文字列の数を返す。 左辺 abcde 右辺 abcce の場合、3文字目まではabcで同一だが、4文字目は左辺のd(アスキーコード100)より右辺のc(アスキーコード99)の方がアスキーコードが小さいので、判断はここで終了し、nilを返す。 左辺 abcde 右辺 abcee の場合、3文字目まではabcで同一だが、4文字目は左辺のd(アスキーコード100)より右辺のe(アスキーコード101)の方がアスキーコードが大きいので、判断はここで終了し、一致した文字数の合計3を返す。 string 左辺の文字列が右辺の文字列より大きいかどうかを判断する。左辺が小さい場合はnilを返す。左辺が大きい場合、一致する文字列の数を返す。(判断の例は上記を参照) string = 左辺の文字列が右辺の文字列より小さいまたは同じかどうかを判断する。左辺が大きい場合はnilを返す。左辺が小さいまたは同じ場合、一致する文字列の数を返す。(判断の例は上記を参照) string = 左辺の文字列が右辺の文字列より大きいまたは同じかどうかを判断する。左辺が小さい場合はnilを返す。左辺が大きいまたは同じ場合、一致する文字列の数を返す。(判断の例は上記を参照) string-upcase 文字列の小文字を大文字に変換する。 string-downcase 文字列の大文字を小文字に変換する。 char-upcase 文字の小文字を大文字に変換する。 char-downcase 文字の大文字を小文字に変換する。 princ-to-string 数値を文字列に変換する。 parse-integer 数字で構成された文字列を数値に変換する。 次回は文字列を使った実際のパッチ作例を見ていく。 非公式チュートリアル 前後 非公式Tutorial 10 メシアン様式即興 非公式Tutorial 概要
https://w.atwiki.jp/kodamasuru/pages/21.html
以下の書き方で統一してください。 Lv. (Lが大文字、vが小文字) (最後の点を忘れずに) 数字 アルファベット スペース ! % ( ) これらの文字は半角で書いてください。 カタカナ (中黒) ? (クエスチョンマーク) × これらの文字は全角で書いてください。
https://w.atwiki.jp/palam/pages/100.html
「はじめてのPalam」へようこそ! こんにちは、生徒役の紫苑(しおん)です。17歳の高校2年生です。 salyu! 先生役のレインです。紫苑と同じく女子高生です。 大人の事情で一時的に日本語とPalamが喋れるようになりました( - *) え~と、最初の「サリュ」って何かしら。 あと、パラムって何? どこの国の言葉? "salyu"はPalamで「こんにちは」って意味だよ。 それで、Palamっていうのは、どこの国の言葉でもないの。 人工言語っていって、人間が自然に作り上げたんじゃなくて、意図的に作られた言葉なんだ。 ちなみに、Palamの作者さんはFaras=Tilasosっていって一人でこの言葉を作ってるんだよ。 世の中変わった人もいるもんだなあ…… ところで、「salyu」ってさっき書いてたけど、Palamはヨーロッパの言語みたいにアルファベットを使うの? パソコンでは文字が表示できないからアルファベットを使うけど、 手書きの時は独自の文字を使って書きます。 最初の内は覚えられないだろうから、アルファベットで書くといいよ。 あ、殆どローマ字読みで良いんだけど、ちょっと注意しなきゃいけないところがあるの。 下の表を見てみて。 一番上の段がアルファベットで、二段目がIPA(国際音声字母)、一番下の段は文字の名前になってるのね。 ローマ字読みと違うのは…xとcね。あと、rとlにも注意しないと。 xはシャ行の子音、cはイタリア語とかの所謂"べらんめえ調"のラ行の子音ね。 rとlは英語みたいに区別するのね。 ねえ、表の文字に色が付いてるのは何か意味があるの? いい所に気づいたね。 表の文字は、赤・青・紫・緑・黄に色分けされていて、 赤色の文字を対清音字(たいせいおんじ)、 青色の文字を対濁音字(たいだくおんじ)、 紫色の文字を中間音字(ちゅうかんおんじ)、 緑色の文字を半母音字(はんぼいんじ)、 黄色の文字を母音字(ぼいんじ)と呼ぶの。 あと、黄色以外の文字をまとめて子音字って呼ぶこともあるよ。 これは後々重要になってくるから、覚えておくといいよ。 あと、hとqがないわね。 それに、大文字は使わないの? 実は作者さんが表に載せ忘れちゃったんだ。 もちろん、大文字も使うよ。頻度は低いけど。 h[h]は固有名詞以外では使わないし、qに関しては全く使わないよ。 Palamは固有名詞を書く時、綴りではなく発音を優先して書くから。 登場人物紹介←前へ 次へ→Palamの語順
https://w.atwiki.jp/cod_infinitewarfare/pages/26.html
クラン一覧 PC ページ1 順番に登録して下さい 全ページ中1クラン1登録のみ重複登録禁止 バナーのサイズは300px×80px以内にして下さい性的・暴力・中傷を含む画像禁止 登録クランにつながるリンクやURLまたは連絡用アカウントを必ず記入して下さい レイアウトが崩れないようプレビュー確認してページ保存して下さい。 紹介文は色変更、顔文字、記号、段落等で装飾せず概要と目的を簡潔な文で4行以内に収めて下さい。誹謗・中傷・煽り含む文字禁止 登録No.20以上は新たなページに登録して下さい。 悪質な行為(談合/グリッチ勧誘及び誘致・中傷等での晒し等)が確認出来るクランの登録は削除対象となります 登録No. クラン名[タグ(大文字)] 在籍人数 バナー・ホームページ・連絡用アカウント等々(300px×80px以内) 紹介文・募集内容※必須(4行以内) 更新日 01 -[大文字] -名 - - 2016/0-/0- 02 -[大文字] -名 - - 2016/0-/0- 03 -[大文字] -名 - - 2016/0-/0- 04 -[大文字] -名 - - 2016/0-/0- 05 -[大文字] -名 - - 2016/0-/0- 06 -[大文字] -名 - - 2016/0-/0- 07 -[大文字] -名 - - 2016/0-/0- 08 -[大文字] -名 - - 2016/0-/0- 09 -[大文字] -名 - - 2016/0-/0- 10 -[大文字] -名 - - 2016/0-/0- 11 -[大文字] -名 - - 2016/0-/0- 12 -[大文字] -名 - - 2016/0-/0- 13 -[大文字] -名 - - 2016/0-/0- 14 -[大文字] -名 - - 2016/0-/0- 15 -[大文字] -名 - - 2016/0-/0- 16 -[大文字] -名 - - 2016/0-/0- 17 -[大文字] -名 - - 2016/0-/0- 18 -[大文字] -名 - - 2016/0-/0- 19 -[大文字] -名 - - 2016/0-/0- 20 -[大文字] -名 - - 2016/0-/0- ※登録No.20以上は新たなページに登録して下さい
https://w.atwiki.jp/palams/pages/100.html
「はじめてのPalam」へようこそ! こんにちは、生徒役の紫苑(しおん)です。17歳の高校2年生です。 salyu! 先生役のレインです。紫苑と同じく女子高生です。 大人の事情で一時的に日本語とPalamが喋れるようになりました( - *) え~と、最初の「サリュ」って何かしら。 あと、パラムって何? どこの国の言葉? "salyu"はPalamで「こんにちは」って意味だよ。 それで、Palamっていうのは、どこの国の言葉でもないの。 人工言語っていって、人間が自然に作り上げたんじゃなくて、意図的に作られた言葉なんだ。 ちなみに、Palamの作者さんはFaras=Tilasosっていって一人でこの言葉を作ってるんだよ。 世の中変わった人もいるもんだなあ…… ところで、「salyu」ってさっき書いてたけど、Palamはヨーロッパの言語みたいにアルファベットを使うの? パソコンでは文字が表示できないからアルファベットを使うけど、 手書きの時は独自の文字を使って書きます。 最初の内は覚えられないだろうから、アルファベットで書くといいよ。 あ、殆どローマ字読みで良いんだけど、ちょっと注意しなきゃいけないところがあるの。 下の表を見てみて。 一番上の段がアルファベットで、二段目がIPA(国際音声字母)、一番下の段は文字の名前になってるのね。 ローマ字読みと違うのは…xとcね。あと、rとlにも注意しないと。 xはシャ行の子音、cはイタリア語とかの所謂"べらんめえ調"のラ行の子音ね。 rとlは英語みたいに区別するのね。 ねえ、表の文字に色が付いてるのは何か意味があるの? いい所に気づいたね。 表の文字は、赤・青・紫・緑・黄に色分けされていて、 赤色の文字を対清音字(たいせいおんじ)、 青色の文字を対濁音字(たいだくおんじ)、 紫色の文字を中間音字(ちゅうかんおんじ)、 緑色の文字を半母音字(はんぼいんじ)、 黄色の文字を母音字(ぼいんじ)と呼ぶの。 あと、黄色以外の文字をまとめて子音字って呼ぶこともあるよ。 これは後々重要になってくるから、覚えておくといいよ。 あと、hとqがないわね。 それに、大文字は使わないの? 実は作者さんが表に載せ忘れちゃったんだ。 もちろん、大文字も使うよ。頻度は低いけど。 h[h]は固有名詞以外では使わないし、qに関しては全く使わないよ。 Palamは固有名詞を書く時、綴りではなく発音を優先して書くから。 登場人物紹介←前へ 次へ→Palamの語順
https://w.atwiki.jp/retropcgame/pages/469.html
タイトル ロリータ姫の絵日記 メーカー パスカルⅡ 発売 1987年11月 ハード PC-88/FM7・77 メディア FD 攻略に使ったバージョン PC-88版 ・基本はCG集なので、ユミコとリカに関してはリターンキーを押しているだけで次に進めます。 ・最後のトモコだけ隠しコマンドが必要です。 トモコの隠しコマンド 1枚目 S(大文字) 2 2 M(大文字) 2枚目 S(大文字) 3 3 3枚目 H(大文字) T(大文字) T(大文字) T(大文字) 4枚目 B(大文字) 4 5枚目 L(大文字) 6枚目 B(大文字) 3 END
https://w.atwiki.jp/imops-forth/pages/33.html
文字列の比較 COMPARE オプションであるから定義されているとは限らないが、2つのaddr len文字列について、その内容が一致するかどうかを判定するforth標準ワードがCOMPARE である。 COMPARE ( c-addr1 u1 c-addr2 u2 -- code ) 比較は大文字小文字が区別される(case-sensitive)。 結果は、完全に等しいときには0を返す。文字列の長さが異なり、短い方の内容が長い方の一部として完全に含まれている場合、u1の方がu2より小さいとき-1、それ以外なら1を返す。短い方の文字列についても不一致がある場合には、最初の不一致文字について、c-addr1 u1で特定される文字列に含まれる文字の方が小さいとき-1、そうでないとき1を返す。 出力コードがやや複雑であるので分岐で書くと: 文字列内容が完全に一致 -- 0 文字列内容が一致しない一方が他方を、その先頭部分として含む場合。前の方が短い -- −1 前の方が長い -- 1 不一致文字があるとき最初の不一致文字について、先の文字列の文字の方が小さい -- −1 最初の不一致文字について、先の文字列の文字の方が大きい -- 1 である。要するに、完全に一致すれば0であり、そうでなければ1か−1、−1になるのは先の文字列の方が"小さい"とき、である。つまり、アルファベット順を前提にすると、辞書的順序で、前の文字列が早い位置なら-1、前の文字列が後の位置なら1、ということである。 CMPSTR COMPAREは、Mopsではデフォルトでは定義されていないが、string+というオプションファイルをロードすれば、CMPSTRというワードが定義され、上のCOMPAREの拡張になっている。CMPSTRの入力と出力コードはCOMPAREと同じであるが、大文字小文字の別を操作できる。すなわち、case?というVALUEをフラグとして、これにtrueを格納すれば、COMAREと同じく、大文字小文字を区別して比較する。case?がfalseなら大文字小文字を区別せず比較する。case?フラグはデフォルトではfalseである。 S= なお、Mopsではもっと簡易な文字列比較ワードとしてS=が定義されている。 S= ( c-addr1 u1 c-addr2 u2 -- b ) これは単純に、一致するときtrue、それ以外はfalseを返す。この比較は常に大文字小文字は区別される。 文字列の印字 TYPE 文字列を画面上に印字するワードがTYPEである。先に述べたように、スタック上では文字列はアドレスと長さの2つの数値で表現されるのが一般である。したがって、TYPEは、その2つを入力として取る。 TYPE ( addr len -- ) \ addr lenで特定された文字列を印字するのが効果 通常のforthの場合、印字はコマンド入力画面に行われる。Mopsではテキスト編集ビュー(コンソール)のキャレット位置から印字される。 ただし、PowerMopsまでは、TYPEはカレントポートに描画するという仕様であり、アプリケーションウィンドウに印字することもできたが、 iMopsでは、常にコンソールウィンドウのテキストビューに印字されるようになっており、それがないアプリケーションで実行はできない。iMopsで、 アプリケーションウィンドウに印字するには、TYPE以外の方法(CoreGraphicsシステムコールかTextViewのメソッド)を用いなければならない。 例えば、 greeting S" Hello world!" type ; のようなワードを定義して実行すれば、画面に、Hello world!と印字されるだろう。 CR SPACE SPACES 文字列の印字の途中に、CRを実行すれば、改行が挿入される。また、SPACEを実行すれば、半角空白が挿入される。SPACESは、スタックから入力を1つとって、その個数分の半角空白を挿入する。負の数の場合は何もしない。 CR ( -- ) \ 印字中に改行 SPACE ( -- ) \ 印字中に空白を挿入 SPACES ( u -- ) \ 印字中にu個の空白を挿入 ." ドット(ピリオド)と二重引用符のこのワード." は、初めから印字を目的とした文字列をリテラルとしてコンパイルする。使い方はS"と同じく、二重引用符 " を区切り文字として、そこまでを文字列として取る。これは、何かのワード定義内で用いられることを前提とするが、そのワードが実行されたとき文字列が印字されることになる。 ." コンパイル時 ( “ccc quote ” -- ) 実行時:( -- ) \ コンパイル時は文字列を取り、実行時はそれを印字。 quote は最後が"であることを示す。 例えば、 greeting ." Hello world!" ; とすれば、上のTYPEを用いた例と同値である。 .( ドットと左丸括弧からなるこのワード.( は、コンパイル時に文字列の印字を実行するものである。終わりの区切り文字は、右丸括弧) をとる。このワードは、コンパイル時に何かメッセージが必要な場合に使われるわけであるが、デバッグのような特別な状況でない限り、滅多に使わないように思われる。使用法としては、 Comp-mess .( Message in compiling) ; のようにすると、このワード定義を入力するとすぐに、Message in compilingと印字される。このワードComp-messの中身は空っぽである。 文字列のスタック上での形式 既に述べたように、ForthおよびMopsでの、文字列のスタック上での表現形式は、文字列格納メモリー域のはじめのアドレスと文字列の長さの二つからなる、addr(ess) len(gth)形式である。しかし、これ以外にも、いわゆるパスカル文字列あるいはカウンテド文字列という表現形式も用いられる。これは、メモリー域の最初の1バイトに文字列の長さを表す数値を格納し、その直後から文字列を連続的に格納する形式で、スタック上では、メモリー域の冒頭のアドレス値一つで表現される。 Forth表現の文字列をPascal形式に変換する必要は、通常のプログラムではでてこないが、逆はありうる。 COUNT 上のような場合に、Pascal形式の文字列について、addr len形式に変換するワードがCOUNTである。 COUNT ( addr1 --- addr2 len) \ スタック上のPascal文字列表現をForth文字列表現に変換する。 ASCII文字とその印字 CHAR [CHAR] 英文字のASCIIコードを数値として使いたい場合がある。Forth標準では、そのために2つのワードが定義されている。 1つは解釈実行環境用のCHARである。 CHAR ( “ spaces name” -- uc ) \ 空白以外の文字を取り、そのASCIIコードをスタックに残す。 CHARは、間の空白は全て無視する。その後に置くのは、形式上は文字列でかまわない。但し、その先頭の文字だけのコードが出力となる。 CHAR about \ -- 97 ( a のコード) もちろん、最初の1文字以外は無駄であるので、通常は一文字しか書かない。 CHARがワード定義内で用いられたときには、直後の文字を入力として受け取ること無く、ただワードCHARの呼び出しがそこにコンパイルされるにとどまる。それを含むワードが実行され、CHARが呼び出されたとき初めて、入力ストリームから文字を獲得しようとするのである。例えば、あまり意味はないが、 CHAR-POWER ( c -- n ) CHAR dup * ; CHAR-POWER a \ -- 97*97 = 9409 のようになる。 もう1つは、コンパイル環境用の[CHAR]である。 [CHAR] コンパイル時 ( “ spaces name” -- ) 実行時 ( -- uc ) \ コンパイル時に文字を取り、実行時にそのコードをスタックに置く 例えば、 Case-Test ( uc -- b ) [CHAR] a ; CHAR D Case-Test \ -- true CHAR d Case-Test \ -- false のようになる。つまり、具体的にいえば、[CHAR]は、Case-Testの定義内でaのコードを取って格納しておき、Case-Test実行時にはそれを取り出して入力と大小を比較するわけである。 Mopsでは、拡張として、解釈実行状態ではCHARとして動作し、コンパイル状態では[CHAR]として動作するワードとして が定義されている。 Case-Test ( uc -- b ) a ; D Case-Test \ -- true d Case-Test \ -- false UNICODE拡張 Forth標準ではオプションとして、文字コードを拡張したCHARおよび[CHAR]が規定されている。ユニコードを想定したものと思われる。しかし、これはオプションであるので、環境によっては対応していない場合もある。おそらく商用のforthとGforthは大丈夫ではないかと思われる。他方、Mopsでは、CHAR、[CHAR]や は、半角英数文字(ASCII文字)を想定しており、2バイト以上で表現される日本語文字には対応していない。しかし、日本語文字は1文字の文字列として扱うことで、ほとんど制限とはならない。 なお、ワードとは関係ないが、ユニコード拡張に関連し、古典的にCHARは1バイト(8ビット)長をも意味していたので、混同を避けるために、文字型であって必ずしも1バイトではない場合には、XCHARと表示することがある。 EMIT 一文字(ASCII)を印字するワードはEMITである。 EMIT ( uc -- ) \ 渡されたコードに該当する文字をスクリーンに印字 例えば、あまり意味はないが、 TYPE-A [CHAR] A EMIT ; TYPE-A とすれば、大文字のAが印字されるわけである。 BL なお、頻用される半角空白のASCII値は、BLという定数として定義されている。 BL ( -- $20 ) 次 数値の表記と印字
https://w.atwiki.jp/anerowa/pages/13.html
プラグイン一覧 あいうえお、カキクケコ、サシスセソ、01234、ABCDE、abcde abcde,ABCDE,01234,% @/*-^\ 「…………。――――。○△□☆・●▲■★・┌┬┐┣╋┫」『』【】!?<> () *見出し1 見出し1 **見出し2 見出し2 ***見出し3 見出し3 ****見出し4 見出し4 ----線 表 縦連結 ○ × 横連結 点 点 リンク [[りんく]] イメージ #image() color(#FF0000){色文字} big(){大文字} strong(){強調文字} 色文字 大文字 強調文字 color(#FF0000){ big(){色文字大文字}} big(){ strong(){大文字強調文字}} color(#FF0000){ strong(){色文字強調文字}} color(#FF0000){ big(){ strong(){色文字大文字強調文字}}} 色文字大文字 大文字強調文字 色文字強調文字 色文字大文字強調文字 改行 br() #region(折りたたみ) 折りたたみ 折りたたみ #endregion +折りたたみ 折りたたみ 折りたたみ