16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:コドンのアミノ酸翻訳関数"
この発言は #00338 六角三房 さんのコドンのアミノ酸翻訳関数 に対するコメントです
六角三房さんの、「コドンのアミノ酸翻訳関数」を配列定数への参照を使って
書き換えてみました。但し、3文字標記のアミノ酸記号にのみ対応しています。
'A'->0, 'G'->1, 'C'->2, 'T'->3, 'U'->3 の変換は配列 Base への参照で行い、
アミノ酸文字列への変換は、配列 AminoAcidTable への参照で行います。
1文字標記のアミノ酸記号に対応するには、そのための配列定数をもう一つ用意
すればよいでしょう。
function TripletToAminoAcid(const S : string):string;
type
TAminoAcid = string[3];
const
Base : array['A'..'U'] of byte =
(0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,3);
{ A B C D E F G H I J K L M N O P Q R S T U }
AminoAcidTable : array[0..3,0..3,0..3] of TAminoAcid =
((('Lys','Lys','Asn','Asn'),
('Arg','Arg','Ser','Ser'),
('Thr','Thr','Thr','Thr'),
('Ile','Met','Ile','Ile')),
(('Glu','Glu','Asp','Asp'),
('Gly','Gly','Gly','Gly'),
('Ala','Ala','Ala','Ala'),
('Val','Val','Val','Val')),
(('Gln','Gln','His','His'),
('Arg','Arg','Arg','Arg'),
('Pro','Pro','Pro','Pro'),
('Leu','Leu','Leu','Leu')),
((' * ',' * ','Tyr','Tyr'),
(' * ','Trp','Cys','Cys'),
('Ser','Ser','Ser','Ser'),
('Leu','Leu','Phe','Phe')));
begin
if (Length(S) <> 3) then
Raise Exception.Create('not triplet.')
else if not ((UpCase(S[1]) in ['A','C','G','T','U']) and
(UpCase(S[2]) in ['A','C','G','T','U']) and
(UpCase(S[3]) in ['A','C','G','T','U'])) then
result := 'XXX'
else
result := AminoAcidTable[Base[UpCase(S[1])],
Base[UpCase(S[2])],
Base[UpCase(S[3])]];
end;
ひの
Original document by ひの 氏 ID:(GFD03044)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|