ビダラビンはウイルスDNAの合成を妨害することによって作用する。それはヌクレオシド類似体であり、したがって活性であるためにはリン酸化されなければならない。上の図は、ビダラビンがキナーゼによって三リン酸ara-ATPに順次リン酸化される3段階プロセスを示す。これはビダラビンの活性型であり、ウイルスDNAポリメラーゼの阻害剤でも基質でもある。ウイルスDNAポリメラーゼの基質として使用されると、ara - ATPはdATPを競合的に阻害して「欠陥のある」DNAの形成をもたらす。ara-ATPが多くのアデノシン塩基を置き換え、DNA鎖に組み込まれる。ara-ATPのため、ホスホジエステル架橋はもはや構築され得ず、鎖を不安定にするので、これはDNA合成の防止をもたらす。ビダラビン三リン酸(ara-ATP)RNAのポリアデニル化も阻害する。HIV - 1および他のレトロウイルスに必須のポリアデニル化を防止する。トランスメチル化反応を妨げる、S-アデノシルホモシステインヒドロラーゼ。ビダラビンに独特の二リン酸化ビダラビン(ara − ADP)も抑制効果を有する。他のヌクレオシド類似体は、抗ウイルス効果を得るために三リン酸化する必要があるが、ara-ADPは酵素リボヌクレオチドレダクターゼを阻害する。これはヌクレオチド二リン酸の減少を防ぎ、ウイルス複製の減少を引き起こす。
1950年代に、カリブ海の海綿動物 Tethya cryptaから2つのヌクレオシドが分離された。これはD-リボースではなくD-アラビノースを含んでいた。これらの化合物は、新世代の糖修飾ヌクレオシド類似体ビダラビン、および関連化合物シタラビンの合成をもたらした。2004年には、これらは臨床用途で唯一の海洋関連化合物だった。この薬は、1960年にStanford Research Institute（現SRI International）のBernard Randall Baker研究室で合成された。この薬はもともと抗癌剤として意図されていた。ビダラビンの抗ウイルス活性は、最初1964年にM. Privat de GarilheとJ. De Rudder により記載された。これは、全身投与される最初のヌクレオシド類似体抗ウイルス薬であり、そしてヒトにおける全身性ヘルペスウイルス感染の治療のために認可された最初の薬剤であった。1976年にアラバマ大学バーミンガム校の研究者であり、医師であるRichard J. Whitley氏が最初に臨床的有効性を認識し、そしてビダラビンは多くのウイルス性疾患の治療に使用された。ビダラビンは、D-リボースがD-アラビノースに置き換えられたアデノシンの類似体である。図1.1からわかるように、ビダラビンはアデノシンの立体異性体である。それは60分の半減期を持ち、そしてその溶解度は0.05%であり、そしてその活性代謝産物に変換されると血液脳関門 (BBB)を通過することができる。
以下の Ruby プログラムで同じパターンを示す。#!/usr/bin/env ruby -KUrequire 'rubygems'require 'spec'class Originator  class Memento    def initialize(state)      # Originator の元の状態を壊しても、この Memento オブジェクトが初回以降の restore で      # 破壊されないよう dup が必要      @state = state.dup    end        def state      # Originator の元の状態を壊しても、この Memento オブジェクトが二度目の restore で      # 破壊されないよう dup が必要      @state.dup    end  end  attr_accessor :state  # メモリに巨大なデータが多数あり、state から再構成可能であるように見せる  def save_to_memento    Memento.new(@state)  end  def restore_from_memento(m)    @state = m.state  endendclass Caretaker < Array; enddescribe Originator do  before(:all) do    @caretaker = Caretaker.new    @originator = Originator.new    @originator.state = "State1"  end  it "should have original state" do    @originator.state.should == 'State1'  end  it "should update state" do    @originator.state = "State2"    @originator.state.should == 'State2'  end  it "should save memento" do    @caretaker << @originator.save_to_memento    @caretaker.size.should == 1  end  it "should update state after save to memento" do    @originator.state = "State3"    @originator.state.should == 'State3'  end  it "should save to memento again" do    @caretaker << @originator.save_to_memento    @caretaker.size.should == 2  end  it "should update state after save to memento again" do    @originator.state = "State4";    @originator.state.should == 'State4'  end  it "should restore to original save point" do    @originator.restore_from_memento @caretaker[0]    @originator.state.should == 'State2'  end  it "should restore to second save point" do    @originator.restore_from_memento @caretaker[1]    @originator.state.should == 'State3'  end  it "should restore after pathological munging of restored state" do    @originator.state[-1] = '5'    @originator.state.should == 'State5'    @originator.restore_from_memento @caretaker[1]    @originator.state.should == 'State3'  end    it "should restore after pathological munging of original state" do    @originator.state = "State6"    @originator.state.should == 'State6'    @caretaker << @originator.save_to_memento    @originator.state[-1] = '7'    @originator.state.should == 'State7'    @originator.restore_from_memento @caretaker[2]    @originator.state.should == 'State6'  endend